標籤:
建立新的 Microsoft® SQL Server™ 登入,使使用者得以串連使用 SQL Server 身分識別驗證的 SQL Server 執行個體。 文法:
sp_addlogin [ @loginame = ] ‘login‘
[ , [ @passwd = ] ‘password‘ ]
[ , [ @defdb = ] ‘database‘ ]
[ , [ @deflanguage = ] ‘language‘ ]
[ , [ @sid = ] sid ]
[ , [ @encryptopt = ] ‘encryption_option‘ ]
參數[
@loginame
=]
‘
login
‘
登入的名稱。login 的資料類型為 sysname,沒有預設設定。
[@passwd =] ‘password‘
登入密碼。password 的資料類型為 sysname,預設設定為 NULL。sp_addlogin 執行後,password 被加密並儲存在系統資料表中。
[@defdb =] ‘database‘
登入的預設資料庫(登入後登入所串連到的資料庫)。database 的資料類型為 sysname,預設設定為 master。
[@deflanguage =] ‘language‘
使用者登入到 SQL Server 時系統指派的預設語言。language 的資料類型為 sysname,預設設定為 NULL。如果沒有指定 language,那麼 language 被設定為伺服器當前的預設語言(由 sp_configure 組態變數 default language 定義)。更改伺服器的預設語言不會更改現有登入的預設語言。language 保持與添加登入時所使用的預設語言相同。
[@sid =] sid
安全標識號 (SID)。sid 的資料類型為 varbinary(16),預設設定為 NULL。如果 sid 為 NULL,則系統為新登入產生 SID。儘管使用 varbinary 資料類型,非 NULL 的值也必須正好為 16 個位元組長度,且不能事先存在。SID 很有用,例如,如果要編寫 SQL Server 登入指令碼,或要將 SQL Server 登入從一台伺服器移動到另一台,並且希望登入在伺服器間具有相同的 SID 時。
[@encryptopt =] ‘encryption_option‘
指定當密碼儲存在系統資料表中時,密碼是否要加密。encryption_option 的資料類型為 varchar(20),可以是下列值之一。
| 值 |
描述 |
| NULL |
加密密碼。這是預設設定。 |
| skip_encryption |
密碼已加密。SQL Server 應該儲存值而且不用重新對其加密。 |
| skip_encryption_old |
已提供的密碼由 SQL Server 較早版本加密。SQL Server 應該儲存值而且不用重新對其加密。此選項只供升級使用。 |
傳回碼值
0(成功)或 1(失敗)
注釋
SQL Server 登入和密碼可包含 1 到 128 個字元,包括任何字母、符號和數字。但是,登入不能:
- 含有反斜線 (\)。
- 是保留的登入名稱稱,例如 sa 或 public,或者已經存在。
- 為 NULL,或為空白字串 (‘‘)。
如果提供預設資料庫的名稱,則不用執行 USE 語句就可以串連到指定的資料庫。但是,不能使用預設的資料庫,直到資料庫擁有者(使用 sp_adduser 或 sp_addrolemember)或 sp_addrole 授予對該資料庫的存取權限為止。
S識別碼是唯一的 Microsoft Windows NT® 使用者標識號。必須保證每個使用者的 S識別碼在 Windows NT 域中的唯一性。SQL Server 自動使用 Windows NT SID 標識 Windows NT 使用者和組,並為 SQL Server 登入產生一個 SID。
將登入添加到 SQL Server 時,如果密碼已經是加密的形式,則使用 skip_encryption 取消密碼加密是有用的。如果此密碼由以前的 SQL Server 版本加密,則使用 skip_encryption_old。
不能從使用者定義的事務中執行 sp_addlogin。
下表顯示了幾個與 sp_addlogin 一起使用的預存程序。
| 預存程序 |
描述 |
| sp_grantlogin |
添加 Windows NT 使用者或組。 |
| sp_password |
更改使用者密碼。 |
| sp_defaultdb |
更改使用者的預設資料庫。 |
| sp_defaultlanguage |
更改使用者的預設語言。 |
許可權
只有 sysadmin 和 securityadmin 固定伺服器角色的成員才可以執行 sp_addlogin。
樣本A. 建立沒有密碼和主預設資料庫的登入 ID
下面的樣本為使用者 Victoria 建立一個 SQL Server 登入名,沒有指定密碼或預設資料庫。
EXEC sp_addlogin ‘Victoria‘
B. 建立登入 ID 和預設資料庫
此樣本為使用者 Albert 建立一個 SQL Server 登入,並指定密碼 food 以及名為 corporate 的預設資料庫。
EXEC sp_addlogin ‘Albert‘, ‘food‘, ‘corporate‘
C.建立使用其它預設語言的登入 ID
下面的樣本為使用者 Claire Picard 建立一個 SQL Server 登入名,密碼為"caniche",預設資料庫為 public_db,預設語言為 French。
EXEC sp_addlogin ‘Claire Picard‘, ‘caniche‘, ‘public_db‘, ‘french‘
D. 建立帶有特定 SID 的登入 ID
下面的樣本為使用者 Michael 建立一個 SQL Server 登入名,密碼為"chocolate",預設資料庫為 pubs,預設語言為 us_english,SID 為 0x0123456789ABCDEF0123456789ABCDEF。
EXEC sp_addlogin ‘Michael‘, ‘chocolate‘, ‘pubs‘, ‘us_english‘, 0x0123456789ABCDEF0123456789ABCDEF
E. 建立登入 ID 並且不加密密碼
下例在 Server1 上為使用者 Margaret 建立了一個密碼為"Rose"的 SQL Server 登入,再析取此加密密碼,然後使用前面加密的密碼將使用者登入 Margaret 添加到 Server2,但不對此密碼進一步加密。之後,使用者 Margaret 即可使用密碼"Rose"登入到 Server2。
-- Server1EXEC sp_addlogin Margaret, Rose--ResultsNew login created.-- Extract encrypted password for MargaretSELECT CONVERT(VARBINARY(32), password) FROM syslogins WHERE name = ‘Margaret‘--Results------------------------------------------------------------------ 0x2131214A212B57304F5A552A3D513453(1 row(s) affected)-- Server2EXEC sp_addlogin ‘Margaret‘, 0x2131214A212B57304F5A552A3D513453, @encryptopt = ‘skip_encryption‘
sqlserver 建立使用者 sp_addlogin