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 相关文章推荐
2021-4-5课程——SQL Server查询【3】
Apr 05 SQL Server
SQL Server数据定义——模式与基本表操作
Apr 05 SQL Server
SQLServer2019 数据库环境搭建与使用的实现
Apr 08 SQL Server
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
Jun 30 SQL Server
SQL SERVER触发器详解
Feb 24 SQL Server
Sql Server之数据类型详解
Feb 28 SQL Server
使用SQL实现车流量的计算的示例代码
Feb 28 SQL Server
SQL Server使用导出向导功能
Apr 08 SQL Server
sql server偶发出现死锁的解决方法
Apr 10 SQL Server
SQL Server携程核心系统无感迁移到MySQL实战
Jun 01 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&MYSQL分页原理及实现
2007/01/02 PHP
DISCUZ 论坛管理员密码忘记的解决方法
2009/05/14 PHP
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
2013/06/05 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
Jquery + Ajax调用webService实例代码(asp.net)
2010/08/27 Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
2012/02/27 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
2013/05/21 Javascript
使用jQuery实现的掷色子游戏动画效果
2014/03/14 Javascript
深入理解JavaScript系列(43):设计模式之状态模式详解
2015/03/04 Javascript
详解AngularJS中的http拦截
2016/02/09 Javascript
前端微信支付js代码
2016/07/25 Javascript
老生常谈原生JS执行环境与作用域
2016/11/22 Javascript
js数组操作方法总结(必看篇)
2016/11/22 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
2018/08/27 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
javascript实现视频弹幕效果(两个版本)
2019/11/28 Javascript
js里面的变量范围分享
2020/07/18 Javascript
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python的一些用法分享
2012/10/07 Python
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
Python实现将文本生成二维码的方法示例
2017/07/18 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
Python学习笔记之文件的读写操作实例分析
2019/08/07 Python
Tensorflow实现部分参数梯度更新操作
2020/01/23 Python
Django框架实现在线考试系统的示例代码
2020/11/30 Python
英国最大的宠物食品和宠物用品网上零售商: Zooplus
2016/08/01 全球购物
Perfumetrader荷兰:香水、化妆品和护肤品在线商店
2017/09/15 全球购物
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
理工大学毕业生自荐信范文
2014/02/22 职场文书
教师见习期自我鉴定
2014/04/28 职场文书
党风廉政建设个人总结
2015/03/06 职场文书
上诉状格式
2015/05/23 职场文书
2017年寒假少先队活动总结
2016/04/06 职场文书
攻略丨滑雪究竟该选哪款对讲机?
2022/02/18 无线电