創建SQL Server 身份驗證登陸賬戶

SQL Server中共有四種類型的登陸名:

  • SQL Server 身份驗證登錄名

  • Windows 身份驗證登錄名

  • 證書映射登錄名

  • 非對稱密鑰映射登錄名

本文主要描述常用的SQL Server 身份驗證登錄名的創建方式及相關內容。

 

創建SQL Server 身份驗證登陸名

 

創建SQL Server身份驗證登陸名有兩種賦予密碼的方式

  1. 以字符串作爲密碼,這種情形適用於創建一個全新的SQL Server身份驗證登陸名。

  2. 使用hash密碼,這通常用於數據庫服務器升級換代,需要將登陸名轉移到新服務器(新實例)上,並保持SQL Server登陸密碼一致的情形下使用。

以字符串作爲密碼

在SSMS中,在服務器安全性下,右擊登陸名,選擇新建登陸名,彈出“登錄名-新建”窗口,如下:

填入登陸名稱,選擇SQL Server 身份驗證方式,輸入密碼並確認,“強制實施密碼策略”、“強制密碼過期”、“用戶在下次登陸時必須修改密碼”三個多選框,勾選表示開啓,最後選擇默認數據庫和默認語言,填寫完畢,點擊確定,即可以完成SQL Server登陸賬戶創建。當然,你也可以選擇上方“腳本”選項,生成創建SQL Server登陸賬戶的腳本,具體如下:

--創建SQL Server 登錄名
USE master;
go
CREATE LOGIN loginName WITH password='ddA12*,j'
       must_change   --首次登陸需要修改密碼,指定此選項check_policy、check_expiration均必須爲on
       ,check_policy=ON
       ,check_expiration = ON --啓動過期選項,則check_policy必須啓動
       ,default_database=master
       ,default_language=簡體中文; --不加此選項,則默認服務器的默認語言
       --查看實例當前默認語言
       --select @@LANGUAGE

當然上面的腳本不是直接生成的,增加了一些註釋等,算是一個創建SQL Server身份驗證登陸賬戶的樣例。

注意:

  • CREATE LOGIN 創建一個登陸賬戶,並賦予其CONNECT SQL 權限

  • SQL Server登陸名能夠使用,要保證

    • 數據庫引擎要開啓“SQL Server 和 Windows身份驗證模式(S)”

    • 登陸賬戶有CONNECT SQL 權限

    • 登陸賬戶已經啓用

    • 有數據庫的對應權限(如果要訪問具體數據庫的話,在數據庫上創建用戶,並賦予其對應權限)

  • 生產環境中,檢查登陸名過期選項通常是關閉的(即設定 check_expiration=off )。因爲一旦我們忘記修改登陸賬戶,將會導致業務不能正常運行,而遭受不必要的損失。通常的做法是設定check_expiration=off,而選擇定期更換賬戶名和密碼,以保障數據庫的安全。開啓這個選項可以應用於給工作人員開啓的臨時賬戶,這樣即使忘記回收,一旦賬戶過期,系統會幫我們自動回收,增加了一重安全性。

  • 密碼是區分大小寫的。密碼應始終至少包含八個字符,並且不能超過 128 個字符。密碼可以包含 a-z、A-Z、0-9 和大多數非字母數字字符。密碼不能包含單引號或 login_name 。如果check_policy=on, Windows 策略要求強密碼,密碼必須至少包含以下四個特點中的三個:

    • * 大寫字符 (A-Z)。

    • * 小寫字符 (a-z)。

    • * 數字 (0-9)。

    • * 一個非字母數字字符,如空格、_、@、*、^、%、!、$、# 或 &。有些字符前端代碼不能識別,要和開發人員確定不能識別的字符。

      密碼可用使用隨機密碼生成器,一方面可用減少設置密碼的工作量;另一方面可以消除個人設置密碼字母數字的選擇習慣,增加安全性。

       設置過期(check_expiration=on)的SQL Server 登陸賬戶,最好建立作業,提前一段時間(如提前一週)通知用戶賬戶過期( 默認過期時間爲42天)。可以通過如下腳本查看賬戶過期時間:

DECLARE @login nvarchar(30)
-- 查詢設定密碼過期的登陸賬號
SELECT @login = name
FROM sys.sql_logins
WHERE is_expiration_checked = 1
      and name = 'dev_temp'
-- 計算登錄賬戶密碼已使用天數
SELECT @login AS 'login',
       DATEDIFF(d,
                CAST(LOGINPROPERTY(@login,
                                   'PasswordLastSetTime') AS datetime),
                GETDATE()) AS 'pwd_using_days'
-- 計算密碼到期之前的剩餘天數
SELECT LOGINPROPERTY(@login, 'DaysUntilExpiration') AS 'days_until_expiration'

hash密碼

現在我們使用剛剛創建的賬戶的hash密碼,給出一個使用hash密碼創建SQL Server登陸賬戶的樣例,腳本如下:

--查詢賬戶密碼的hash值及sid值
SELECT
       password_hash,sid
FROM sys.sql_logins
WHERE name='loginName';
--保存上面查詢結果中password_hash及sid的值,刪除登陸名
--使用上面的hash密碼及SID進行SQL Server賬戶創建
CREATE LOGIN [loginName]
WITH PASSWORD=0x0200BE90BF0443B2C9D36F47B05BB1C065DD43396C35149B4567981897C5E931AC1CA5522C5079C7EF776C30FEA153B8A7E237327001C09EDB503BDB647D2538F139E19D308A HASHED
       ,SID=0x1843B3D8339FF94E8F06DFB0A18BC273
       , DEFAULT_DATABASE=[master]
       , DEFAULT_LANGUAGE=[簡體中文]
       , CHECK_EXPIRATION=ON
       , CHECK_POLICY=ON;
GO

注意:hash密碼只能用來創建SQL Server身份驗證賬戶,其他三種形式賬戶不能使用。SID值在一個實例中是唯一的,如果有重複,會報錯,那麼修改SID值即可。當然我們也最好不適應SID 選項,這樣系統會自動分配唯一SID值給創建登陸名。

總結:本文給出了創建SQL Server登陸驗證的登陸名的兩種方式及應用場景,後續我們將陸續給出SQL Server登陸賬戶權限賦予及管理等,敬請期待……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章