編程管理SQL SERVER的帳號?
?
每個人都關(guān)心數(shù)據(jù)安全。
如果不關(guān)心的話,可能沒有意識到訪問服務(wù)器中的敏感數(shù)據(jù)是非常容易的。
因為SQL SERVER在這方面已經(jīng)替我們考慮過了,
所以在我們開發(fā)應(yīng)用程序就可以直接使用SQL SERVER的安全策略。
?在SQL SERVER中,我們可以在ENTERPRISE MANAGER中創(chuàng)建一個登錄帳號,
并且賦予一定的權(quán)限,如果要做到我們的應(yīng)用程序中呢?
==============================================================================
SQL SERVER提供了如下系統(tǒng)過程
▲▲一、SP_ADDLOGIN
創(chuàng)建新的 Microsoft SQL Server 登錄,使用戶得以連接使用 SQL Server 身份驗證的 SQL Server 實例。
語法
sp_addlogin [ @loginame = ] 'login'
??? [ , [ @passwd = ] 'password' ]
??? [ , [ @defdb = ] 'database' ]
??? [ , [ @deflanguage = ] 'language' ]
??? [ , [ @sid = ] sid ]
??? [ , [ @encryptopt = ] 'encryption_option' ]
參數(shù)
[@loginame =] 'login'
登錄的名稱。login 的數(shù)據(jù)類型為 sysname,沒有默認設(shè)置。
[@passwd =] 'password'
登錄密碼。password 的數(shù)據(jù)類型為 sysname,默認設(shè)置為 NULL。sp_addlogin 執(zhí)行后,password 被加密并存儲在系統(tǒng)表中。
[@defdb =] 'database'
登錄的默認數(shù)據(jù)庫(登錄后登錄所連接到的數(shù)據(jù)庫)。database 的數(shù)據(jù)類型為 sysname,默認設(shè)置為 master。
[@deflanguage =] 'language'
用戶登錄到 SQL Server 時系統(tǒng)指派的默認語言。language 的數(shù)據(jù)類型為 sysname,默認設(shè)置為 NULL。如果沒有指定 language,那么 language 被設(shè)置為服務(wù)器當(dāng)前的默認語言(由 sp_configure 配置變量 default language 定義)。更改服務(wù)器的默認語言不會更改現(xiàn)有登錄的默認語言。language 保持與添加登錄時所使用的默認語言相同。
[@sid =] sid
安全標(biāo)識號 (SID)。sid 的數(shù)據(jù)類型為 varbinary(16),默認設(shè)置為 NULL。如果 sid 為 NULL,則系統(tǒng)為新登錄生成 SID。盡管使用 varbinary 數(shù)據(jù)類型,非 NULL 的值也必須正好為 16 個字節(jié)長度,且不能事先存在。SID 很有用,例如,如果要編寫 SQL Server 登錄腳本,或要將 SQL Server 登錄從一臺服務(wù)器移動到另一臺,并且希望登錄在服務(wù)器間具有相同的 SID 時。
[@encryptopt =] 'encryption_option'
指定當(dāng)密碼存儲在系統(tǒng)表中時,密碼是否要加密。encryption_option 的數(shù)據(jù)類型為 varchar(20),可以是下列值之一。
值?????描述
------------------- ------------------------------------------------------------
NULL????加密密碼。這是默認設(shè)置。
skip_encryption??密碼已加密。SQL Server 應(yīng)該存儲值而且不用重新對其加密。
skip_encryption_old?已提供的密碼由 SQL Server 較早版本加密。SQL Server 應(yīng)該存儲值而且不用重新對其加密。此選項只供升級使用。
▲▲二、SP_GRANTDBACCESS
為 Microsoft SQL Server 登錄或 Microsoft Windows NT 用戶或組在當(dāng)前數(shù)據(jù)庫中添加一個安全帳戶,并使其能夠被授予在數(shù)據(jù)庫中執(zhí)行活動的權(quán)限。
語法:
sp_grantdbaccess [@loginame =] 'login'
??? [,[@name_in_db =] 'name_in_db' [OUTPUT]]
參數(shù):
[@loginame =] 'login'
當(dāng)前數(shù)據(jù)庫中新安全帳戶的登錄名稱。Windows NT 組和用戶必須用 Windows NT 域名限定,格式為"域\用戶",例如 LONDON\Joeb。登錄不能使用數(shù)據(jù)庫中已有的帳戶作為別名。login 的數(shù)據(jù)類型為 sysname,沒有默認值。
[@name_in_db =] 'name_in_db' [OUTPUT]
數(shù)據(jù)庫中帳戶的名稱。name_in_db 是 sysname 類型的 OUTPUT 變量,默認值為 NULL。如果沒有指定,則使用 login。如果將其指定為 NULL 值的 OUTPUT 變量,則設(shè)置 @name_in_db 為 login。當(dāng)前數(shù)據(jù)庫不必存在 name_in_db。
▲▲三、SP_DROPLOGIN
刪除 Microsoft SQL Server 登錄,以阻止使用該登錄名訪問 SQL Server。
語法
sp_droplogin [ @loginame = ] 'login'
參數(shù)
[@loginame =] 'login'
將被刪除的登錄。login 的數(shù)據(jù)類型為 sysname,沒有默認值。login 必須已經(jīng)存在于 SQL Server 中。
▲▲四、SP_REVOKEDBACCESS
從當(dāng)前數(shù)據(jù)庫中刪除安全帳戶。
語法
sp_revokedbaccess [ @name_in_db = ] 'name'
參數(shù)
[@name_in_db =] 'name'
是要刪除的帳戶名。name 的數(shù)據(jù)類型為 sysname,無默認值。name 可以是 Microsoft? SQL Server? 用戶名或 Microsoft Windows NT? 用戶名或組名,而且必須存在于當(dāng)前數(shù)據(jù)庫中。當(dāng)指定 Windows NT 用戶或組時,請指定該 Windows NT 用戶或組在數(shù)據(jù)庫中可被識別的名稱(即用 sp_grantdbaccess 添加的名稱)。
▲▲五、GRANT
在安全系統(tǒng)中創(chuàng)建項目,使當(dāng)前數(shù)據(jù)庫中的用戶得以處理當(dāng)前數(shù)據(jù)庫中的數(shù)據(jù)或執(zhí)行特定的 Transact-SQL 語句。
語法
語句權(quán)限:
GRANT { ALL | statement [ ,...n ] }
TO security_account [ ,...n ]
對象權(quán)限:
GRANT
??? { ALL [ PRIVILEGES ] | permission [ ,...n ] }
??? {
??????? [ ( column [ ,...n ] ) ] ON { table | view }
??????? | ON { table | view } [ ( column [ ,...n ] ) ]
??????? | ON { stored_procedure | extended_procedure }
??????? | ON { user_defined_function }
??? }
TO security_account [ ,...n ]
[ WITH GRANT OPTION ]
[ AS { group | role } ]
▲▲六、REVOKE
刪除以前在當(dāng)前數(shù)據(jù)庫內(nèi)的用戶上授予或拒絕的權(quán)限。
語法
語句權(quán)限:
REVOKE { ALL | statement [ ,...n ] }
FROM security_account [ ,...n ]
對象權(quán)限:
REVOKE [ GRANT OPTION FOR ]
??? { ALL [ PRIVILEGES ] | permission [ ,...n ] }
??? {
??????? [ ( column [ ,...n ] ) ] ON { table | view }
??????? | ON { table | view } [ ( column [ ,...n ] ) ]
??????? | ON { stored_procedure | extended_procedure }
??????? | ON { user_defined_function }
??? }
{ TO | FROM }
??? security_account [ ,...n ]
[ CASCADE ]
[ AS { group | role } ]
▲▲SP_PASSWORD
添加或更改 Microsoft? SQL Server? 登錄的密碼。
語法
sp_password [ [ @old = ] 'old_password' , ]
??? { [ @new =] 'new_password' }
??? [ , [ @loginame = ] 'login' ]
參數(shù)
[@old =] 'old_password'
是舊密碼。old_password 為 sysname 類型,其默認值為 NULL。
[@new =] 'new_password'
是新密碼。new_password 為 sysname 類型,無默認值。如果沒有使用命名參數(shù),就必須指定 old_password。
[@loginame =] 'login'
是受密碼更改影響的登錄名。login 為 sysname 類型,其默認值為 NULL。login 必須已經(jīng)存在,并且只能由 sysadmin 固定服務(wù)器角色的成員指定。
=============================================================================
應(yīng)用實例:
--添加
--添加用戶:
exec sp_addlogin '用戶名','密碼','默認數(shù)據(jù)庫名'
--添加到數(shù)據(jù)庫
exec sp_grantdbaccess '用戶名','數(shù)據(jù)庫名'
--分本權(quán)限
grant insert,select,update,delete on table1 to public
--刪除????????
--刪除權(quán)限
revoke insert,delete on table1 from public
--刪除數(shù)據(jù)庫中的用戶
exec sp_revokedbaccess '用戶名'
--刪除用戶
exec sp_droplogin '用戶名'
--示例2
--創(chuàng)建僅對某個數(shù)據(jù)庫具有所有權(quán)限的用戶
--切換到你新增的用戶要控制的數(shù)據(jù)庫
use 你的庫名
go
--新增用戶
exec sp_addlogin 'test'?--添加登錄
exec sp_grantdbaccess N'test'?--使其成為當(dāng)前數(shù)據(jù)庫的合法用戶
exec sp_addrolemember N'db_owner', N'test'?--授予對自己數(shù)據(jù)庫的所有權(quán)限
--這樣創(chuàng)建的用戶就只能訪問自己的數(shù)據(jù)庫,及數(shù)據(jù)庫中包含了guest用戶的公共表
go
--刪除測試用戶
exec sp_revokedbaccess N'test'?--移除對數(shù)據(jù)庫的訪問權(quán)限
exec sp_droplogin N'test'?--刪除登錄
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
