2013年7月11日 星期四

Logins and Server Roles

SQL Logins

SQL Server 2012 supports the following login types:

  1. SQL Server–Authenticated Logins
  2. Windows - Authenticated Logins
  3. Certificate
  4. Asymmetric key

建立 Logins

要建立 SQL Server 的 Logins ,你可以使用以下四種類別:

1. 使用 SQL Server–Authenticated

採用「SQL Server 認證」的登入是由 DB Engine 進行認證,登入密碼儲存在 master 資料庫中。

CREATE LOGIN sql_user_a WITH PASSWORD = 'Pa$$w0rd';

2. 使用 Windows - Authenticated

採用「 Windows 帳號」的登入,你可以使用本機使用者或者網域中的使用者,同時也可以使用特定的群組來建立 SQL Server 登入。

--使用特定使用者建立登入
CREATE LOGIN "SQL-A\Local_One" FROM WINDOWS;

--使用特定群組建立登入
CREATE LOGIN "SQL-A\Group_One" FROM WINDOWS;

3. 使用憑證認證(Certificate - Authentication)

你可以使用 CREATE CERTIFICATE 指令在 SQL 中建立憑證,再將該憑證授權給登入。

--建立憑證
CREATE CERTIFICATE user2
ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
WITH SUBJECT = 'user2 certificate in master database',
EXPIRY_DATE = '01/01/2014';

--建立登入
CREATE LOGIN user2 FROM CERTIFICATE user2;

PS. 使用憑證認證常用於網路存取作業,如 Service Broker、Mirroring 。

4. 使用金鑰登入(Asymmetric Key - Authentication)

你可以使用 CREATE ASYMMETRIC KEY 指令在 SQL 中建立金鑰,再將該金鑰授權給登入。

--建立金鑰
CREATE ASYMMETRIC KEY user3_key 
	WITH ALGORITHM = RSA_2048
	ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'; 

--建立登入
CREATE LOGIN user3 FROM ASYMMETRIC KEY user3_key;

驗證模式

在 SQL 安裝期間,您必須選取 Database Engine 的驗證模式。 有兩種可能的模式:「Windows 驗證模式」和「QL Server 及 Windows 驗證混合模式」。

Windows 驗證模式

這個模式 SQL Server 只允許合法的 Windows 網域使用者登入。

SQL Server 及 Windows 驗證混合模式

這個模式 SQL Server 除了允許合法的 Windows 網域使用者外,也允許 SQL Server 帳戶來登入 SQL Server。

驗證安全性

當使用 SQL Logins 時,你可以使用憑證非對稱金鑰來增加驗證的安全性。

  • Certificate Authentication
  • Asymmetric Key Authentication

管理 Logins

CREATE LOGIN 是用來建立登入的指令,包含帳戶的使用期限或者密碼原則都可以方過它來設定。

建立 Windows 登入帳戶

透過 SQL 圖形介面建立

建立 SQL 登入帳戶

透過 SQL 圖形介面建立

透過 DDL 建立

使用 DDL 來管理登入帳戶

  • CREATE LOGIN :建立 SQL Server、Windows Azure SQL 資料庫 及 SQL Server PDW 的 Database Engine 登入。
  • ALTER LOGIN :變更 SQL Server 登入帳戶的屬性。
  • DROP LOGIN :刪除 SQL Server 登入帳戶。
//設定本機使用者
CREATE LOGIN "SQL-A\Local_One" FROM WINDOWS;

//設定網域使用者
CREATE LOGIN "CONTOSO\Account_Two" FROM WINDOWS;

//設定網域群組
CREATE LOGIN "CONTOSO\Group_Two" FROM WINDOWS;
CREATE LOGIN sql_user_a WITH PASSWORD = 'Pa$$w0rd';
ALTER LOGIN vito DISABLE;
DROP LOGIN vito;

與登入相關的檢視

sys.server_principals

查看登入的相關資訊,如:登入的建立時間,或目前狀態等屬性。

sys.sql_logins

查看更進階的登入相關資訊,如:密碼原則、密碼逾期等屬性。

Denying Server Access

You can configure the Deny permission to block specific account from making connections to the Database Engine.

USE [master]
GO
DENY CONNECT SQL "contoso\domain_user_b";
GO

Server Roles

前面提過 Permission 可以套用到個別的 Login ,如果要套用到一群人,則可以使用 Server Roles

Server Roles 是 Sever-level ,也就是權限範圍為整個伺服器。 另外 SQL Server 還有個 Database Roles ,該角色的權限範圍為整個資料庫。

Server Roles

SERVER ROLE 分成系統預設的角色,和使用者自訂的角色。

以下9個是系統固定的server-level角色:

  • sysadmin
  • serveradmin
  • securityadmin
  • processadmin
  • setupadmin
  • bulkadmin
  • diskadmin
  • dbcreator
  • public

設定與修改 Server Role 的成員

透過 ALTER SERVER ROLE 指定,可以用來新增或刪除角色的成員。

ALTER SERVER ROLE serveradmin ADD MEMBER "vito";
ALTER SERVER ROLE serveradmin DROP MEMBER "vito";

查詢 Server Role 的資訊

You can use the following commands, views, and functions to learn more about the properties of specific server roles:

  • sp_helpsrvrole :Provides a list of fixed server roles
  • sp_helpsrvrolemember :Provides fixed server role membership
  • sp_srvrolepermission :Provides fixed server role permissions
  • IS_SRVROLEMEMBER :Enables you to check whether a SQL Server login is a member of a specific fixed or user-defined server role
  • sys.server_role_members Provides information about role members, displayed as role and member id

User-Defined Server Roles

User-Defined Server Roles 是 SQL 2012 的新功能, 當固定的伺服器角色都不符合需求時,你就可以利用這個功能來建立 custom server roles ,建立步驟如下:

  • Creating the user-defined server role
  • Granting server-level permissions to the role
  • Adding SQL Server logins to the role

你可以在 SSMS 的 UI 中操作,也可以使用以下命令來操作:

CREATE SERVER ROLE Modify_Databases;

GRANT ALTER ANY DATABASE TO Modify_Databases;

ALTER SERVER ROLE Modify_Databases ADD MEMBER "vito"; 

Credentials (認證)

Credential 是包含驗證資訊的記錄,該項資訊是連接到 SQL Server 外部資源時所需的資訊。 如果提供者沒有任何登入對應認證,系統就會使用對應至 SQL Server 服務帳戶的認證。

一個 Credential 可以對應到多個 login 身份,但是一個 login 只可以對應到一個 Credential.

大部分 Credential 都包含 Windows 使用者和密碼。 你何以在安全性節點上建立 Credential.

或者使用 Create Credential 建立認證,再使用 ALTER LOGIN 將認證對應到 SQL Server 登入。

  --建立憑證  Create Credential credentialForVito  With identity='vito', secret='p@ssWord'    --將憑證配置給 User1 Login  ALTER LOGIN User1  ADD Credential credentialForVito;    --將憑證配置給 User2 Login  ALTER LOGIN User2  ADD Credential credentialForVito;  

沒有留言:

張貼留言