SQL Server 安全篇——SQL Server 安全模型(3)——資料庫級別安全性
阿新 • • 發佈:2019-01-22
在資料庫層面,以授權到安全主體來實現安全性。 相對於伺服器級別,資料庫級別稱為資料庫使用者和資料庫角色。
使用者:
通常情況下,資料庫使用者是從例項層面建立的登入名來實現。相同例項下,一個登入名可以對映到多個數據庫使用者中,並且可以單獨授權到資料庫層面。從SQL 2012開始,也可以建立沒有登入名的使用者(包含資料庫)
帶有登入名的使用者:
通過SSMS或者T-SQL來建立使用者,一般需要關聯到一個被配置好許可權的例項層面登入。常用的選項有:- DEFAULT_SCHEMA:使用者的預設架構,將在後續介紹。
- ALLOW_ENCRYPTED_VALUE_MODIFICATIONS:允許在大容量複製(bulk copy)中使用資料加密。在後續章節介紹。
USE AdventureWorks2016CTP3
GO
CREATE USER Danni FOR LOGIN Danni WITH DEFAULT_SCHEMA = Sales ;
雖然沒有強制規定必須與登入名一模一樣,但是作為良好的管理來說應該保持一致,如果不指定預設架構,則預設為dbo。
不需要登入名的使用者:
建立不帶登入名的使用者時,使用者要麼對映到Windows安全主體,要麼使用SQL Server身份驗證, 如果使用身份驗證,前提條件是資料庫必須已經配置為包含資料庫,具體內容可見:- DEFAULT_SCHEMA/ALLOW_ENCRYPTED_VALUE_MODIFICATIONS:同上。
- DEFAULT_LANGUAGE:使用者使用的預設語言。
- SID:僅對SQL Server身份驗證有效,指定使用者關聯的SID,多個庫的同一個使用者使用相同的SID,特別適合在災難恢復和AlwaysON環境。
USE AdventureWorks2016CTP3 GO CREATE USER [cartersecuresafe\phil] WITH DEFAULT_SCHEMA=dbo ;
資料庫角色:
跟伺服器角色類似,資料庫也有內建角色,這些角色也具有預定好的一系列許可權。也稱為固定資料庫角色(fixed database roles)。固定資料庫角色跟伺服器角色一樣,只能增刪使用者,不能修改許可權。角色 | 描述 |
db_accessadmin | 成員可在資料庫中增刪資料庫使用者。 |
db_backupoperator | 預設為了備份所用,對第三方工具不可用,第三方工具一般需要sysadmin許可權。 |
db_datareader | 成員可以執行select命令在所有的表,可以使用DENY來禁用某些表的SELECT,因為DENY總覆蓋GRANT。 |
db_datawriter | 成員可以執行DML語句到庫的任何一個表。同理可以使用DENY來控制。 |
db_denydatareader | 與db_datareader相反,拒絕對庫的所有select許可權。 |
db_denydatawriter | 與db_datawriter相反。 |
db_ddladmin | 可以執行DDL命令,相對少用。 |
db_owner | 庫的所有者,擁有庫的所有許可權。 |
db_securityadmin | 可以對使用者,針對安全物件進行GRANT 、DENY、REVOKE,也可以修改除db_onwer之外的所有成員。 |
除了固定資料庫角色之外,也可以在資料庫層面建立使用者自定義角色。比如下面案例,可以建立一個SalesRole角色,屬於dbo並只有Danni使用者,對Sales架構的表有增刪改查許可權:
USE AdventureWorks2016CTP3
GO
--建立角色
CREATE ROLE SalesRole AUTHORIZATION dbo ;
GO
--對角色授權
GRANT DELETE ON SCHEMA::Sales TO SalesRole ;
GRANT INSERT ON SCHEMA::Sales TO SalesRole ;
GRANT SELECT ON SCHEMA::Sales TO SalesRole ;
GRANT UPDATE ON SCHEMA::Sales TO SalesRole ;
--新增成員
ALTER ROLE SalesRole ADD MEMBER Danni ;