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 Server——索引+基于单表的数据插入与简单查询【1】
Apr 05 SQL Server
【HBU】数据库第四周 单表查询
Apr 05 SQL Server
SQLServer2019 数据库的基本使用之图形化界面操作的实现
Apr 08 SQL Server
SQL Server中交叉联接的用法详解
Apr 22 SQL Server
如何有效防止sql注入的方法
May 25 SQL Server
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
Jun 30 SQL Server
MySQL 中如何归档数据的实现方法
Mar 16 SQL Server
如何使用SQL Server语句创建表
Apr 12 SQL Server
SQL Server中使用表变量和临时表
May 20 SQL Server
SQL Server使用T-SQL语句批处理
May 20 SQL Server
SQL SERVER中的流程控制语句
May 25 SQL Server
SQL Server中T-SQL标识符介绍与无排序生成序号的方法
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
从零开始学YII2框架(一)通过Composer安装Yii2框架
2014/08/20 PHP
Yii中Model(模型)的创建及使用方法
2015/12/28 PHP
Joomla使用Apache重写模式的方法
2016/05/04 PHP
解决Laravel blade模板转义html标签的问题
2019/09/03 PHP
javascript getElementsByName()的用法说明
2009/07/31 Javascript
jQuery 获取URL参数的插件
2010/03/04 Javascript
javascript时间函数基础介绍
2013/03/28 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
javascipt:filter过滤介绍及使用
2014/09/10 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
jquery插件NProgress.js制作网页加载进度条
2015/06/05 Javascript
基于JQuery实现图片轮播效果(焦点图)
2016/02/02 Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
2016/10/13 Javascript
vue 过滤器filter实例详解
2018/03/14 Javascript
在vue中使用setInterval的方法示例
2019/04/16 Javascript
JS实现滚动条触底加载更多
2019/09/19 Javascript
关于layui时间回显问题的解决方法
2019/09/24 Javascript
基于Vue CSR的微前端实现方案实践
2020/05/27 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
如何手动实现一个 JavaScript 模块执行器
2020/10/16 Javascript
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
python中黄金分割法实现方法
2015/05/06 Python
python3 flask实现文件上传功能
2020/03/20 Python
Django中的ajax请求
2018/10/19 Python
解决Shell执行python文件,传参空格引起的问题
2018/10/30 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
浅析HTML5页面元素及属性
2021/01/20 HTML / CSS
保密协议书范本
2014/04/22 职场文书
办公室主任竞聘演讲稿
2014/05/15 职场文书
热门专业求职信
2014/05/24 职场文书
班级读书活动总结
2014/06/30 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
2015年社区纪检工作总结
2015/04/21 职场文书
Python实现灰色关联分析与结果可视化的详细代码
2022/03/25 Python