国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

怎樣給某一用戶創建視圖的最小權限

2024-07-21 02:46:35
字體:
來源:轉載
供稿:網友
怎樣給某一用戶創建視圖的最小權限

問題:

今天群里有位同學提問:我怎樣可以給某一用戶在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; 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 峨山| 静乐县| 台江县| 灯塔市| 民县| 阿尔山市| 九台市| 乐平市| 西安市| 潼关县| 莲花县| 遵化市| 贵州省| 鄢陵县| 横峰县| 辽阳县| 长葛市| 彰化市| 齐河县| 错那县| 广灵县| 抚州市| 蓬溪县| 顺平县| 福建省| 夏邑县| 堆龙德庆县| 长海县| 北票市| 班戈县| 贵港市| 临邑县| 昭苏县| 武安市| 永安市| 宁南县| 宝鸡市| 县级市| 天柱县| 宜都市| 霍邱县|