数据库教程:SQLServer只赋予创建表权限的全过程

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

背景

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

我新建一个登录账号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只赋予创建表权限的文章就介绍到这了,更多相关sqlserver赋予创建表权限内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!

需要了解更多数据库技术:SQLServer只赋予创建表权限的全过程,都可以关注数据库技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/dtteaching/1086963.html

(0)
上一篇 2022年4月30日
下一篇 2022年4月30日

精彩推荐