記得自己從開始編寫與sql資料庫相關的程式起,就一直採用sa登陸,也沒有聽人說過使用者名稱和登陸名之間有什麼關係,甚至都不知道這些東西,只知道sa許可權很大,可以執行資料庫中的所有東西,直至暑假,在看到某一專案在探討關於資料庫登陸許可權保護時,自己才重視到了這一點。在網上查了很多資料,自己也總結了一些東西。
首先,要認清資料庫登陸名和資料庫使用者名稱之間的關係。資料庫登陸名和資料庫使用者名稱是有差別的,在一個資料庫中是一一相對應的關係。如果把資料庫比作一個大廈,那麼資料庫登入名就是進入大廈的通行證,而使用者名稱則是進入大廈房間的鑰匙,如果每個房間看做是Sql資料庫(大廈)的一個資料庫,那麼每個登陸名可以在每一個資料庫中建立一個使用者,如果沒有建立使用者,則登陸名就只能純粹的登陸資料庫,什麼事情都幹不了。下面就是插入資料庫登入名和使用者名稱的語句:
exec sp_addlogin '登入名','密碼','選擇的資料庫'
exec sp_adduser '使用者名稱','登入名'
然後,將光把登入名和使用者名稱新增進入資料庫還不行,還要對你新增的使用者名稱進行賦權,此時你的資料庫的使用者名稱才有用。如下程式碼:資料表名稱指的是使用者能操作的資料庫的一個表格名稱,
grant select,update,insert on 資料表名稱 to 使用者名稱
這樣,一個正確的使用者就建立好了,現在你可以用你的登陸名和使用者名稱運算元據庫中的資料了,當然,我還查到網上說的賦予登入名的使用者角色問題,如下程式碼:
--新增使用者
exec sp_addlogin 'test' --新增登入
exec sp_grantdbaccess N'test' --使其成為當前資料庫的合法使用者
exec sp_addrolemember N'db_owner', N'test' --授予對自己資料庫的所有許可權
這是網上搜尋到的一個新增使用者的密碼,雖然自己沒有去試過,但感覺上面的那兩個儲存過程用起來還是比較簡單一點,而且賦予許可權更清晰,下面的sp_addrolemember,我查過幫助文件,確實有很多說明資料庫角色的,但總感覺沒有grant語句來的詳細。
另外還附上平常用的比較多的關於資料庫使用者許可權的語句:
--檢視所有使用者
exec sp_helpuser
--檢視某使用者的許可權
exec sp_helprotect @username='使用者名稱'
--查詢某資料庫中的所有表格
select name from sysobjects where xtype='u'
--刪除使用者名稱和登陸名的儲存過程
exec sp_droplogin '登入名'
exec sp_dropuser '使用者名稱'