根據數據庫Schema限制用戶對數據庫的操做行爲html
授予Shema dbo下對象的定義權限給某個用戶(也就是說該用戶能夠修改架構dbo下全部表/視圖/存儲過程/函數的結構)數據庫
use [Your DB NAME] GRANT VIEW DEFINITION ON SCHEMA :: dbo to [THE USER NAME]
回收某個用戶對Shema dbo下對象的定義權限(也就是說該用戶不能夠修改架構dbo下全部表/視圖/存儲過程/函數的結構)服務器
use [Your DB NAME] DENY VIEW DEFINITION ON SCHEMA :: dbo to [THE USER NAME]
容許某個用戶執行Shema dbo下定義的存儲過程架構
GRANT EXEC ON SCHEMA :: dbo TO [your_DB_account]
不容許某個用戶執行Shema dbo下定義的存儲過程函數
DENY EXEC ON SCHEMA :: dbo TO [your_DB_account]
容許某個用戶能夠對Schema dbo下對象進行增刪改查操做spa
GRANT SELECT ON SCHEMA :: dbo TO [your_DB_account] -- 容許查詢數據權限 GRANT UPDATE ON SCHEMA :: dbo TO [your_DB_account] -- 容許更新數據權限 GRANT INSERT ON SCHEMA :: dbo TO [your_DB_account] -- 容許插入數據權限 GRANT DELETE ON SCHEMA :: dbo TO [your_DB_account] -- 容許刪除數據權限
不容許某個用戶對Schema dbo下對象進行增刪改查操做日誌
DENY SELECT ON SCHEMA :: dbo TO [your_DB_account] -- 不容許查詢數據權限 DENY UPDATE ON SCHEMA :: dbo TO [your_DB_account] -- 不容許更新數據權限 DENY INSERT ON SCHEMA :: dbo TO [your_DB_account] -- 不容許插入數據權限 DENY DELETE ON SCHEMA :: dbo TO [your_DB_account] -- 不容許刪除數據權限
限制用戶對數據庫對象(好比表/視圖/存儲過程等)的操做行爲code
容許用戶修改數據庫表T_Testing的結構server
GRANT VIEW DEFINITION ON [dbo].[T_Testing] to [THE USER NAME]
不容許用戶修改數據庫表T_Testing的結構htm
DENY VIEW DEFINITION ON [dbo].[T_Testing] to [Customer]
容許用戶對數據庫表T_Testing進行增刪改查操做
GRANT SELECT ON [dbo].[T_Testing] TO [your_DB_account] -- 容許查詢數據權限 GRANT UPDATE ON [dbo].[T_Testing] TO [your_DB_account] -- 容許更新數據權限 GRANT INSERT ON [dbo].[T_Testing] TO [your_DB_account] -- 容許插入數據權限 GRANT DELETE ON [dbo].[T_Testing] TO [your_DB_account] -- 容許刪除數據權限
不容許用戶對數據庫表T_Testing進行增刪改查操做
DENY SELECT ON [dbo].[T_Testing] TO [your_DB_account] -- 不容許查詢數據權限 DENY UPDATE ON [dbo].[T_Testing] TO [your_DB_account] -- 不容許更新數據權限 DENY INSERT ON [dbo].[T_Testing] TO [your_DB_account] -- 不容許插入數據權限 DENY DELETE ON [dbo].[T_Testing] TO [your_DB_account] -- 不容許刪除數據權限
上面這些對數據庫表的語句一樣適用於其它數據庫對象,例如視圖/存儲過程等,以下所示:
GRANT VIEW DEFINITION ON [dbo].[V_Testing] to [your_DB_account] --容許用戶修改視圖V_Testing的定義 DENY VIEW DEFINITION ON [dbo].[V_Testing] to [your_DB_account]--不容許用戶修改視圖V_Testing的定義 GRANT VIEW DEFINITION ON [dbo].[P_Testing] to [your_DB_account] --容許用戶修改存儲過程P_Testing的定義 DENY VIEW DEFINITION ON [dbo].[P_Testing] to [your_DB_account]--不容許用戶修改存儲過程P_Testing的定義
可是注意SELECT/UPDATE/DELETE/INSERT這幾個增刪改查的權限不適用於存儲過程
此外對數據庫對象(好比表/試圖/存儲過程等)的上述操做行爲,還能夠直接設置在數據庫角色(注意是數據庫角色,不是數據庫Instance角色)上,例如:
容許數據庫MyDataBase的角色MyRole對錶T_Testing擁有增刪改查權限
USE [MyDataBase] GRANT SELECT ON [dbo].[T_Testing] TO [MyRole] -- 容許查詢數據權限 GRANT UPDATE ON [dbo].[T_Testing] TO [MyRole] -- 容許更新數據權限 GRANT INSERT ON [dbo].[T_Testing] TO [MyRole] -- 容許插入數據權限 GRANT DELETE ON [dbo].[T_Testing] TO [MyRole] -- 容許刪除數據權限
不容許數據庫MyDataBase的角色MyRole對錶T_Testing進行增刪改查操做
USE [MyDataBase] DENY SELECT ON [dbo].[T_Testing] TO [MyRole] -- 不容許查詢數據權限 DENY UPDATE ON [dbo].[T_Testing] TO [MyRole] -- 不容許更新數據權限 DENY INSERT ON [dbo].[T_Testing] TO [MyRole] -- 不容許插入數據權限 DENY DELETE ON [dbo].[T_Testing] TO [MyRole] -- 不容許刪除數據權限
此外對於SELECT/UPDATE這兩個改查的權限還能夠直接設置到表/試圖的列上,例以下面語句咱們設置數據庫MyDataBase的角色MyRole擁有表T_Tesing和視圖V_Testing中列Name的改查權限
USE [MyDataBase] GRANT SELECT ON [dbo].[T_Testing]([Name]) TO [MyRole] -- 容許查詢表T_Testing的Name列數據 GRANT UPDATE ON [dbo].[T_Testing]([Name]) TO [MyRole] -- 容許更新表T_Testing的Name列數據 GRANT SELECT ON [dbo].[V_Testing]([Name]) TO [MyRole] -- 容許查詢視圖V_Testing的Name列數據 GRANT UPDATE ON [dbo].[V_Testing]([Name]) TO [MyRole] -- 容許更新視圖V_Testing的Name列數據
使用數據庫權限控制用戶的訪問行爲
若是但願某個用戶只擁有某個數據庫的只讀權限,最簡單的辦法就是隻將該數據庫的角色db_datareader賦予用戶便可:
exec sp_addrolemember' db_datareader','用戶名'
這裏最後列出全部數據庫Instance角色和(用戶映射)數據庫角色的含義:
數據庫Instance角色:
(用戶映射)數據庫角色:
轉自:https://www.cnblogs.com/OpenCoder/p/8087210.html