設置Sql server用戶對表、視圖、存儲過程、架構的增刪改查權限
根據數據庫Schema限制用戶對數據庫的操作行為
授予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下對象進行增刪改查操作
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] -- 不允許刪除數據權限
限制用戶對數據庫對象(比如表/視圖/存儲過程等)的操作行為
允許用戶修改數據庫表T_Testing的結構
GRANT VIEW DEFINITION ON [dbo].[T_Testing] to [THE USER NAME]
不允許用戶修改數據庫表T_Testing的結構
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/DELETE/INSERT這幾個增刪改查的權限還可以直接設置到表/試圖的列上,例如下面語句我們設置數據庫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 INSERT ON [dbo].[T_Testing]([Name]) TO [MyRole] -- 允許插入表T_Testing的Name列數據 GRANT DELETE 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列數據 GRANT INSERT ON [dbo].[V_Testing]([Name]) TO [MyRole] -- 允許插入視圖V_Testing的Name列數據 GRANT DELETE ON [dbo].[V_Testing]([Name]) TO [MyRole] -- 允許刪除視圖V_Testing的Name列數據
使用數據庫權限控制用戶的訪問行為
如果希望某個用戶只擁有某個數據庫的只讀權限,最簡單的辦法就是只將該數據庫的角色db_datareader賦予用戶即可:
exec sp_addrolemember‘ db_datareader‘,‘用戶名‘
這裏最後列出所有數據庫Instance角色和(用戶映射)數據庫角色的含義:
數據庫Instance角色:
- sysadmin 可以在SQLServer中執行任何活動。
- serveradmin 可以設置服務器範圍的配置選項,關閉服務器。
- setupadmin 可以管理鏈接服務器和啟動過程。
- securityadmin 可以管理登錄和CREATEDATABASE權限,還可以讀取錯誤日誌和更改密碼。
- processadmin 可以管理在SQLServer中運行的進程。
- dbcreator 可以創建、更改和除去數據庫。
- diskadmin 可以管理磁盤文件。
- bulkadmin 可以執行BULKINSERT語句。
(用戶映射)數據庫角色:
- db_owner執行數據庫中的所有維護和配置活動。
- db_accessadmin添加或刪除Windows用戶、組和SQLServer登錄的訪問權限。
- db_datareader讀取所有用戶表中的所有數據。
- db_datawriter添加、刪除或更改所有用戶表中的數據。
- db_ddladmin在數據庫中運行任何數據定義語言(DDL)命令。
- db_securityadmin修改角色成員身份並管理權限。
- db_backupoperator備份數據庫。
- db_denydatareader無法讀取數據庫用戶表中的任何數據。
- db_denydatawriter無法添加、修改或刪除任何用戶表或視圖中的數據。
設置Sql server用戶對表、視圖、存儲過程、架構的增刪改查權限