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 相关文章推荐
SQL Server2019数据库之简单子查询的具有方法
Apr 27 SQL Server
sql查询结果列拼接成逗号分隔的字符串方法
May 25 SQL Server
解决sql server 数据库,sa用户被锁定的问题
Jun 11 SQL Server
SQLServer中JSON文档型数据的查询问题解决
Jun 27 SQL Server
利用 SQL Server 过滤索引提高查询语句的性能分析
Jul 15 SQL Server
SQL写法--行行比较
Aug 23 SQL Server
Spark SQL 2.4.8 操作 Dataframe的两种方式
Oct 16 SQL Server
SQL中的三种去重方法小结
Nov 01 SQL Server
使用SQL实现车流量的计算的示例代码
Feb 28 SQL Server
sql时间段切分实现每隔x分钟出一份高速门架车流量
Feb 28 SQL Server
SQLServer RANK() 排名函数的使用
Mar 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 CURL获取邮箱地址的详解
2013/06/03 PHP
定义php常量的详解
2013/06/09 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
ThinkPHP打水印及设置水印位置的方法
2016/10/14 PHP
php5.x禁用eval的操作方法
2018/10/19 PHP
php PDO属性设置与操作方法分析
2018/12/27 PHP
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
JavaScript对象创建及继承原理实例解剖
2013/02/28 Javascript
查找iframe里元素的方法可传参
2013/09/11 Javascript
JavaScript代码性能优化总结(推荐)
2016/05/16 Javascript
全面解析JavaScript中apply和call以及bind(推荐)
2016/06/15 Javascript
jQuery自适应轮播图插件Swiper用法示例
2016/08/24 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
2016/10/24 Javascript
AngularJS 实现购物车全选反选功能
2017/10/24 Javascript
Angular 作用域scope的具体使用
2017/12/11 Javascript
基于jQuery.i18n实现web前端的国际化
2018/05/04 jQuery
layui实现table加载的示例代码
2018/08/14 Javascript
Python中List.index()方法的使用教程
2015/05/20 Python
python opencv实现图片旋转矩形分割
2018/07/26 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
2019/02/12 Python
Python多线程同步---文件读写控制方法
2019/02/12 Python
Python中字符串与编码示例代码
2019/05/20 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
Melijoe时尚童装德国官网:Melijoe德国
2016/09/03 全球购物
数控专业毕业生自荐信范文
2014/03/04 职场文书
2014年惩防体系建设工作总结
2014/12/01 职场文书
酒店工程部岗位职责
2015/02/12 职场文书
少年雷锋观后感
2015/06/10 职场文书
消防演习感想
2015/08/10 职场文书
少先队中队工作总结
2015/08/14 职场文书
优秀毕业生主要事迹材料
2015/11/04 职场文书
Golang二维切片初始化的实现
2021/04/08 Golang
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
2021/06/13 Python
JavaScript实现两个数组的交集
2022/03/25 Javascript