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 05 SQL Server
sqlserver2017共享功能目录路径不可改的解决方法
Apr 16 SQL Server
SQL Server代理:理解SQL代理错误日志处理方法
Jun 30 SQL Server
SQL写法--行行比较
Aug 23 SQL Server
sql时间段切分实现每隔x分钟出一份高速门架车流量
Feb 28 SQL Server
MySQL 中如何归档数据的实现方法
Mar 16 SQL Server
通过T-SQL语句创建游标与实现数据库加解密功能
Mar 16 SQL Server
SQL CASE 表达式的具体使用
Mar 21 SQL Server
SQL Server远程连接的设置步骤(图文)
Mar 23 SQL Server
SQL Server中的游标介绍
May 20 SQL Server
SQL SERVER中的流程控制语句
May 25 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的socket编程详解
2016/11/20 PHP
Zend Framework入门教程之Zend_Registry组件用法详解
2016/12/09 PHP
Javascript Cookie读写删除操作的函数
2010/03/02 Javascript
Array.prototype 的泛型应用分析
2010/04/30 Javascript
jquery attr 设定src中含有&(宏)符号问题的解决方法
2011/07/26 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
使用不同的方法结合/合并两个JS数组
2014/09/18 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
javascript实现连续赋值
2015/08/10 Javascript
跟我学习javascript的全局变量
2015/11/16 Javascript
js 右侧浮动层效果实现代码(跟随滚动)
2015/11/22 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
jQuery+PHP+Mysql实现抽奖程序
2020/04/12 jQuery
JS和JQuery实现雪花飘落效果
2017/11/30 jQuery
Javascript中绑定click事件的四种方式介绍
2018/10/26 Javascript
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
2018/10/23 Python
在Python中给Nan值更改为0的方法
2018/10/30 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
Python Map 函数的使用
2020/08/28 Python
英国网上花店:Bunches
2016/11/29 全球购物
Hanro官网:奢华男士和女士内衣、睡衣和家居服
2018/10/25 全球购物
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
应届生财务会计求职信
2013/11/05 职场文书
演讲稿的写法
2014/05/19 职场文书
呐喊读书笔记
2015/06/30 职场文书
会计岗位工作总结
2015/08/12 职场文书
生日寿星公答谢词
2015/09/29 职场文书
2016公司中秋节寄语
2015/12/07 职场文书
用Python将库打包发布到pypi
2021/04/13 Python
Spring this调用当前类方法无法拦截的示例代码
2022/03/20 Java/Android