国产探花免费观看_亚洲丰满少妇自慰呻吟_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; 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 延川县| 吉隆县| 冀州市| 本溪市| 浮山县| 德阳市| 报价| 盘山县| 广安市| 元江| 通化市| 社旗县| 铜梁县| 广东省| 宜章县| 来安县| 光泽县| 陵水| 金湖县| 贡嘎县| 临武县| 榕江县| 满洲里市| 大关县| 盐城市| 大埔县| 五峰| 肃宁县| 榆社县| 北宁市| 页游| 双流县| 嘉祥县| 鸡泽县| 静宁县| 武夷山市| 东港市| 浑源县| 繁昌县| 宁化县| 茶陵县|