SQLServer权限之只开启创建表权限


Posted in SQL Server onApril 12, 2022

背景

今天客户问到一个问题。 我想新建一个账号给外部人员使用,但是我只想给他创建表的权限,这应该如何操作。开始可能认为这个问题很简单。

我新建一个登录账号A

USE [master]
GO
CREATE LOGIN [A] WITH PASSWORD=N'123456', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO

创建数据库级别的用户A

USE [security_test]
GO
CREATE USER [a] FOR LOGIN [a] WITH DEFAULT_SCHEMA=[dbo]
GO

赋予创建表的权限

GRANT CREATE TABLE TO A;

SQLServer权限之只开启创建表权限

然后给他赋予创建表的权限

现在试试建表

CREATE TABLE test (id int)

提示如下信息:

SQLServer权限之只开启创建表权限

这是什么情况?

解决办法1

创建表,每个表都是需要一个所有者,就是架构名。 对于我们的创建表语句  CREATE TABLE test (id int)  它其实默认使用的是 dbo架构。

A用户有了创建表的权限,还需要有dbo 架构的修改权限。 于是我们需要:

GRANT ALTER ON SCHEMA::dbo TO A;
GO

但此时我们会遇到另外一个问题,就是加上这个权限之后,A用户除了create table 之外还能做drop table ,alter table等操作。

所以我们需要创建一个DDL 触发器 ,来阻止其他的操作

CREATE TRIGGER db_trigger_BlockNonTableDDL
ON DATABASE 
FOR DDL_DATABASE_LEVEL_EVENTS
AS 
BEGIN 
   IF IS_MEMBER('A') = 1
   BEGIN 
 
      DECLARE @TriggerEventText nvarchar(max);
      SET @TriggerEventText = EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)') 
      IF NOT ((@TriggerEventText LIKE 'CREATE TABLE%'))
      BEGIN
         RAISERROR (@TriggerEventText, 16, 1)
         ROLLBACK TRANSACTION; 
      END
   END; 
END; 
GO

解决办法2

如果,创建的表不需要使用默认的dbo架构 

那么可以给 给外部人员单独创建一个shchema 。给新建一个架构schema ,

create schema schema1 authorization dbo
go

然后

grant create table to A
grant alter, insert on schema::schema1 to A

此时,A仍然可以创建表,和删除表,但是他直接创建和删除属于它的架构的表。这也起到了限定权限的问题。

总结

到此这篇关于SQLServer只赋予创建表权限的文章就介绍到这了!

SQL Server 相关文章推荐
SQLServer 日期函数大全(小结)
Apr 08 SQL Server
sql查询结果列拼接成逗号分隔的字符串方法
May 25 SQL Server
SQL Server代理:理解SQL代理错误日志处理方法
Jun 30 SQL Server
利用 SQL Server 过滤索引提高查询语句的性能分析
Jul 15 SQL Server
sql server 累计求和实现代码
Feb 28 SQL Server
sql时间段切分实现每隔x分钟出一份高速门架车流量
Feb 28 SQL Server
SQL Server内存机制浅探
Apr 06 SQL Server
SQL Server表分区降低运维和维护成本
Apr 08 SQL Server
MSSQL基本语法操作
Apr 11 SQL Server
在SQL Server中使用 Try Catch 处理异常的示例详解
Jul 15 SQL Server
SQL bool盲注和时间盲注详解
Jul 23 SQL Server
如何使用SQL Server语句创建表
Apr 12 #SQL Server
MSSQL基本语法操作
Apr 11 #SQL Server
SQL Server数据库查询出现阻塞之性能调优
Apr 10 #SQL Server
sql server偶发出现死锁的解决方法
SQL Server的存储过程与触发器以及系统函数和自定义函数
Apr 10 #SQL Server
SQL Server表分区降低运维和维护成本
SQL Server使用导出向导功能
You might like
十天学会php之第八天
2006/10/09 PHP
fleaphp下不确定的多条件查询的巧妙解决方法
2008/09/11 PHP
第二章 PHP入门基础之php代码写法
2011/12/30 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
this[] 指的是什么内容 讨论
2007/03/24 Javascript
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
2010/03/15 Javascript
Node.js实现在目录中查找某个字符串及所在文件
2014/09/03 Javascript
JS中取二维数组中最大值的方法汇总
2016/04/17 Javascript
基于Angularjs实现分页功能
2016/05/30 Javascript
温习Javascript基础语法之词法结构
2016/05/31 Javascript
RGB和YUV 多媒体编程基础详细介绍
2016/11/04 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
2017/05/08 jQuery
深入浅析Vue.js 中的 v-for 列表渲染指令
2018/11/19 Javascript
浅谈JS和jQuery的区别
2019/03/27 jQuery
基于JavaScript获取base64图片大小
2019/10/18 Javascript
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
Python实现在线程里运行scrapy的方法
2015/04/07 Python
Python做简单的字符串匹配详解
2017/03/21 Python
Python列表(List)知识点总结
2019/02/18 Python
Python PIL图片添加字体的例子
2019/08/22 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
Python过滤掉numpy.array中非nan数据实例
2020/06/08 Python
python判断变量是否为列表的方法
2020/09/17 Python
利用SVG和CSS3来实现一个炫酷的边框动画
2015/07/22 HTML / CSS
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
C#面试常见问题
2013/02/25 面试题
师范生教师实习自我鉴定
2013/09/27 职场文书
汽车技术服务与营销专业在籍生自荐信
2013/09/28 职场文书
材料加工硕士生求职信
2013/10/10 职场文书
校园歌咏比赛主持词
2014/03/18 职场文书
公司试用期员工自我评价
2014/09/17 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
范文之农村基层党建工作报告
2019/10/24 职场文书
解决numpy数组互换两行及赋值的问题
2021/04/17 Python