首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

更换用户登陆的语句如何写啊

2012-01-10 
更换用户登陆的语句怎么写啊??比如一开始我用SA登陆,然后又想用用户名san登陆,用语句怎么写啊[解决办法]建

更换用户登陆的语句怎么写啊??
比如一开始我用SA登陆,然后又想用用户名san登陆,用语句怎么写啊

[解决办法]
建立新的 Microsoft® SQL Server™ 登入,允許使用者利用「SQL Server 的帳戶驗證」來連線至 SQL Server 的執行個體。


安全性附註 儘可能使用「Windows 的帳戶驗證」。


語法
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 位元,而且不可是已存在的。在您編寫指令碼或將 SQL Server 登入從一伺服器移至另一伺服器時,而您希望登入在伺服器之間擁有相同的 SID,這時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 授與該資料庫存取權限之前,您還是無法使用預設資料庫。

安全識別碼 (SID) 是唯一的 Microsoft Windows NT® 使用者識別碼。Windows NT 網域中的每位使用者保證都有唯一的安全識別碼。SQL Server 會自動使用 Windows NT 安全識別碼來識別 Windows NT 使用者及群組,並會針對 SQL Server 登入產生安全識別碼。

若在新增登入至 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. 建立主要預設資料庫的登入識別碼
此範例將建立使用者 Victoria 的 SQL Server 登入,但不指定預設資料庫。

EXEC sp_addlogin 'Victoria ', 'B1r12-36 '

B. 建立登入識別碼及預設資料庫
此範例將建立使用者 Albert 的 SQL Server 登入,密碼為 "B1r12-36 " ,且預設資料庫為 corporate。

EXEC sp_addlogin 'Albert ', 'B1r12-36 ', 'corporate '

C. 以不同預設語言建立登入識別碼
此範例將建立使用者 Claire Picard 的 SQL Server 登入,密碼為 "B1r12-36 ",預設資料庫為 public_db,而預設語言為法文。

EXEC sp_addlogin 'Claire Picard ', 'B1r12-36 ', 'public_db ', 'french '

D. 以特定安全識別碼建立登入識別碼
此範例將建立使用者 Michael 的 SQL Server 登入,密碼為 "B1r12-36, ",預設資料庫為 pubs,預設語言為 us_english,而安全識別碼為 0x0123456789ABCDEF0123456789ABCDEF。

EXEC sp_addlogin 'Michael ', 'B1r12-36 ', 'pubs ', 'us_english ', 0x0123456789ABCDEF0123456789ABCDEF

E. 建立登入識別碼且密碼不進行加密
此範例將建立使用者 Margaret 的 SQL Server 登入,其在 Server1 的密碼為 "B1r12-36 " ,萃取加密的密碼,然後利用之前加密的密碼新增使用者 Margaret 的登入至 Server2,但不進一步將密碼加密。接著使用者 Margaret 可以利用密碼 Rose 登入 Server2。



-- Server1
EXEC sp_addlogin 'Margaret ', 'B1r12-36 '

--Results
New login created.

-- Extract encrypted password for Margaret
SELECT CONVERT(VARBINARY(256), password)
FROM syslogins
WHERE name = 'Margaret '

--Results
------------------------------
0x0100163A5F026DA00F9FBCF3CB2E75B0C84887F3A87E191F8E0B7A2660F064A52B19590B9DE20D94DC0DFF857EDA

(1 row(s) affected)

-- Server2
EXEC sp_addlogin 'Margaret ', 0x0100163A5F026DA00F9FBCF3CB2E75B0C84887F3A87E191F8E0B7A2660F064A52B19590B9DE20D94DC0DFF857EDA,
@encryptopt = 'skip_encryption '


[解决办法]
/*--示例说明
示例在数据库pubs中创建一个拥有表jobs的所有权限、拥有表titles的SELECT权限的角色r_test
随后创建了一个登录l_test,然后在数据库pubs中为登录l_test创建了用户账户u_test
同时将用户账户u_test添加到角色r_test中,使其通过权限继承获取了与角色r_test一样的权限
最后使用DENY语句拒绝了用户账户u_test对表titles的SELECT权限。
经过这样的处理,使用l_test登录SQL Server实例后,它只具有表jobs的所有权限。
--*/

USE pubs

--创建角色 r_test
EXEC sp_addrole 'r_test '

--授予 r_test 对 jobs 表的所有权限
GRANT ALL ON jobs TO r_test
--授予角色 r_test 对 titles 表的 SELECT 权限
GRANT SELECT ON titles TO r_test

--添加登录 l_test,设置密码为pwd,默认数据库为pubs
EXEC sp_addlogin 'l_test ', 'pwd ', 'pubs '

--为登录 l_test 在数据库 pubs 中添加安全账户 u_test
EXEC sp_grantdbaccess 'l_test ', 'u_test '

--添加 u_test 为角色 r_test 的成员
EXEC sp_addrolemember 'r_test ', 'u_test '

--拒绝安全账户 u_test 对 titles 表的 SELECT 权限
DENY SELECT ON titles TO u_test

/*--完成上述步骤后,用 l_test 登录,可以对jobs表进行所有操作,但无法对titles表查询,虽然角色 r_test 有titles表的select权限,但已经在安全账户中明确拒绝了对titles的select权限,所以l_test无titles表的select权限--*/

--从数据库 pubs 中删除安全账户
EXEC sp_revokedbaccess 'u_test '

--删除登录 l_test
EXEC sp_droplogin 'l_test '

--删除角色 r_test
EXEC sp_droprole 'r_test '

热点排行