星空网 > 软件开发 > 数据库

怎样给某一用户创建视图的最小权限

问题:

今天群里有位同学提问:我怎样可以给某一用户在dbo架构中创建视图的最小权限?

-------------------------------------------------------------------------------------------

第一想法很简单无非是:

CREATE ROLE MyRole; GO GRANT CREATE VIEW TO MyRole; GO CREATE USER MyUser WITHOUT LOGIN; GOEXEC sp_addrolemember 'MyRole', 'MyUser'; GOEXECUTE AS USER = 'MyUser'; GOCREATE VIEW dbo.V_TESTASSELECT 1 AAGOREVERTGO

但事实是,如果仅仅这样授权,该用户会收到这样的错误信息:
消息 2760,级别 16,状态 1,过程 V_TEST,第 9 行
The specified schema name "dbo" either does not exist or you do not have permission to use it.

错误的原因是该用户没有修改架构的权限.于是添加修改dbo架构的授权:

GRANT ALTER ON SCHEMA::dbo TO MyRole;GOCREATE VIEW dbo.V_TESTASSELECT 1 AAGOREVERTGO

这次创建视图执行成功了.
但新的问题来了.由于用户拥有了修改dbo架构的权限,用户也就有了修改表/视图/存储过程/函数等的权限

,甚至拥有了删除这些对象的权限,通过刚才的授权,下面的语句就能执行成功:

EXECUTE AS USER = 'MyUser'; GO ALTER TABLE dbo.MyTable ADD AnotherID INT NULL; GO REVERT; GO  EXECUTE AS USER = 'MyUser'; GO DROP TABLE dbo.MyTable; GO REVERT; GO 

要命的是,我们不能简单通过授权来禁止用户在某一架构下所有对象的删除和修改权限。

-------------------------------------------------------------------------------------------

最终解决方案:使用数据库级别的DDL触发器来取消某一角色用户的删除/修改相关对象的事物。

CREATE TRIGGER [trig_db_BlockDropObjcect]ON DATABASE FOR DROP_TABLE,DROP_VIEW,DROP_PROCEDURE,DROP_FUNCTION,DROP_CONTRACT,DROP_DEFAULT,DROP_SYNONYM,DROP_TYPE  ,ALTER_TABLE,ALTER_PROCEDURE,ALTER_FUNCTIONAS BEGIN  IF IS_MEMBER('MyRole') = 1  BEGIN    PRINT 'You are not authorized to alter or drop this object.'; 
    --仅保留修改视图权限 ROLLBACK TRANSACTION; END; END;

 




原标题:怎样给某一用户创建视图的最小权限

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

光子易(PhotonPay)_光子易跨境:https://www.ikjzd.com/w/2024
olive:https://www.ikjzd.com/w/2025
DMM:https://www.ikjzd.com/w/2026
Tagger:https://www.ikjzd.com/w/2027
立陶宛二手衣物交易平台_Vinted:https://www.ikjzd.com/w/2028
KissMeTrics:https://www.ikjzd.com/w/2029
优秀的亚马逊运营每天必做的二十件事:https://www.xlkjsw.com/news/92277.html
对赌嗜血!深圳大卖卖身之后……:https://www.kjdsnews.com/a/1842198.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流