SQLServer數據庫權限設置--保障數據庫安全
一.登陸界面引入
下圖為SQL Server的登陸界面。
1)服務器名稱:“.”代表本地計算機,選擇下拉框,可以看見還有一個與本機機名相同的內容,也代表於本地服務器連接;要連接遠程服務器的話,在此處填寫遠程IP地址;
2)身份驗證:身份驗證下拉框內容為”Windows 身份驗證“和 ”SQLServer 身份驗證“兩種登陸方式,這就是登陸賬戶。
”Windows 身份驗證“:適合於Windows平臺用戶,不需要提供密碼和Windows集成驗證;
”SQLServer 身份驗證“:適合於非Windows平臺用戶或Internet用戶,需要提供登陸賬號和登陸密碼;賬號sa就屬於該種登陸賬戶,是一個超級管理員登陸賬號。
3)sa登陸賬號
sa是一個超級登陸賬號,我們使用他後,可以看見數據庫服務器中的所有數據庫,及各數據庫中所有的表,擁有著管理數據庫服務器的所有權限,剛學習.net程序開發的時候,應用程序,會使用該賬號連接數據庫,因為該賬號的特殊性,使得我們在開發程序時,使用該賬號,對數據庫安全性極其不安全(因為可以看到所有的數據庫,數據表,並能對數據庫進行增刪改操作)。為此,在程序開發中,有必要通過添加新的登陸賬號,添加對應的數據庫用戶,並對數據庫用戶設置不同的權限,以保證數據庫及數據的安全性。
下面內容主要說明怎樣創建登陸賬號,創建數據庫用戶,及對數據庫用戶授予權限。
二.登陸賬號添加與刪除
1)登陸賬號添加
1.創建Windows 登陸賬戶, 語法: exec sp_grantlogin ‘登陸賬號‘
use master go exec sp_grantlogin ‘LAPTOP-R1U6PBGI\xiaoming‘ --LAPTOP-R1U6PBGI代表本機機器名,xiaoming代表該電腦的一個用戶名,這個賬號可以通過"計算機管理"中的"本地用戶和組"來為該電腦添加用戶,並設置對本電腦操作權限
2.創建SQL Server登陸賬戶, 語法: exec sp_addlogin ‘登陸賬號‘,‘登陸密碼’
use master go exec sp_addlogin‘xiaoming‘,‘123456‘
執行代碼後,在數據庫客戶端會顯示這兩個登陸賬號,如下圖所示
2)刪除登陸賬戶,語法:exec sp_droplogin ‘登陸賬號‘
use master go exec sp_droplogin ‘LAPTOP-R1U6PBGI\xiaoming‘
用新創建的登陸賬號登陸SQL server客戶端後(沒有為其添加數據庫用戶和權限),點擊裏面的數據庫發現SQL server客戶端報以下提示
並且[安全性]裏的[登陸名]與sa賬號裏的內容不同,只有‘sa‘和剛剛創建的‘xiaoming‘賬號
備註:
使用剛創建的登陸賬號登陸客戶端,在沒有為其設置數據庫用戶的時候,只能看見裏面有的數據庫,不能打開數據庫,更不能查看其中的數據表,不能執行SQL語句的查詢.
三.數據庫用戶
1)創建數據庫用戶
指定為哪個數據庫添加數據庫用戶,基本語法:exec sp_grantbaccess ‘登陸賬戶名‘,‘數據庫用戶名‘
use SMDB--為數據庫SMDB創建數據庫用戶名 go exec sp_grantdbaccess ‘xiaoming‘,‘xiaomingUser01‘
創建登陸賬戶都是在master數據庫下執行的,而數據庫用戶名是為具體的數據庫內創建,所有使用 use SMDB go 語法指向SMDB數據庫,調用系統存儲過程sp_grantdbaccess 創建名為xiaomingUser01的用戶名,其登陸賬號名為xiaoming。
下圖可以看見,數據庫SMDB中的安全性裏的用戶已有xiaomingUser01用戶名
從上圖還可以看見,dbo數據庫用戶名,它表示數據庫的所有者(DB Owner)。可以對數據庫和其對象進行所有的管理工作,擁有數據庫操作的所有權限。我們無法刪除dbo用戶,此用戶出現每個數據庫中,默認分配給sa登陸賬號,所以sa登陸賬號可以訪問所有的數據庫。
2)刪除數據庫用戶
同樣是在具體的數據庫中執行刪除,而非master數據庫中執行
語法: exec sp_dropuser ‘數據庫用戶名‘
use SMDB go exec sp_dropuser ‘xiaomingUser01‘;
四.給數據庫用戶授權
為數據庫創建完數據庫用戶名後,使用xiaoming登陸賬號登陸客戶端後,發現我們只能打開數據庫SMDB,其他數據庫同樣無法打開,打開SMDB數據後,發現‘表’中內容為空,沒有數據表,這是為何?因為我們還沒有為用戶授權,這樣,用戶就不能對數據庫進行操作,為保證軟件使用功能,我們有必要對數據用戶進行限制。如銀行管理系統,客戶和銀行對銀行軟件系統的訪問權限是不同的,客戶只能查看自己賬戶的信息,如存款多少,透支額度,密碼修改等權限,不能查看其他客戶信息;而銀行則可以查看所有的客戶基本信息,如客戶卡號,開卡時間,卡號是否凍結等權限,卻不能更改客戶的密碼,存款多少,更改存款等權限。可見,給數據庫用戶授權的重要性,及安全性,它保證了不同用戶操作同一數據庫的權限。
1)授權語法
grant 權限 [on 表名] to 數據庫用戶
2)收回權限語法
revoke 權限 [on 表名] to 數據庫用戶
註明:[]裏的內容是限定數據庫中數據表,可以不加,不加[]內容表示給數據庫中的所有數據表授權,加上[]限定內容,只是對限定的表格授權。
use SMDB go grant select,insert,update on Students to xiaomingUser01
給表Students授權增、改、查數據操作後,我們使用xiaoming登陸賬號登陸後,能看見數據庫SMDB中的表Students,卻看不見其他的數據表,而且在Students表中不能執行刪除操作,因為我們沒有賦予刪除的權限。
use SMDB go grant select,insert,update to xiaomingUser01
對比兩段代碼,執行後,代碼1只是給Students數據表授權,而代碼2沒有限定,則給數據庫SMDB中所有數據表授權。
3)數據庫角色
給用戶單獨授權非常麻煩,為此我們可以給數據庫用戶賦予一個對應的“角色”;角色自動給數據庫用戶相應的權限。使用方便。下面為常用的固定角色。
1.數據庫角色
public
--public 角色是一個特殊的數據庫角色,每個數據庫用戶都屬於它。public 角色:
--捕獲數據庫中用戶的所有默認權限。
--無法將用戶、組或角色指派給它,因為默認情況下它們即屬於該角色。
--含在每個數據庫中,包括 master、msdb、tempdb、model 和所有用戶數據庫。
--無法除去。
db_owner
--進行所有數據庫角色的活動,以及數據庫中的其它維護和配置活動。
--該角色的權限跨越所有其它固定數據庫角色。
db_accessadmin
--在數據庫中添加或刪除 Windows NT 4.0 或 Windows 2000 組和用戶以及 SQL Server 用戶。
db_datareader
--查看來自數據庫中所有用戶表的全部數據。
db_datawriter
--添加、更改或刪除來自數據庫中所有用戶表的數據
db_ddladmin
--添加、修改或除去數據庫中的對象(運行所有 DDL)
db_securityadmin
--管理 SQL Server 2000 數據庫角色的角色和成員,並管理數據庫中的語句和對象權限
db_backupoperator
--有備份數據庫的權限
db_denydatareader
--拒絕選擇數據庫數據的權限
db_denydatawriter
--拒絕更改數據庫數據的權限
2.添加和刪除固定角色的基本語法
exec sp_addrolemember ‘數據庫角色名‘,‘數據庫用戶名’
exec sp_droprolemember ‘數據庫角色名’,‘數據庫用戶名’
3.具體代碼:
use SMDB go exec sp_addrolemember ‘db_owner‘,‘xiaomingUser01‘--增加db_owner角色 exec sp_droprolemember ‘db_owner‘,‘xiaomingUser01‘--刪除角色
五.補充說明
登陸賬號和數據庫及數據庫用戶的關系
登陸賬號和數據庫用戶是一對多的關系,數據庫用戶和數據庫是一對一的關系。一個登陸賬號,可以有多個數據庫用戶,而一個數據庫用戶只能與一個數據庫對應。
說明:
以上內容為本人學習過程中整理,可能有知識點不全,或理解不足之處,請大家多多留言指教。
SQLServer數據庫權限設置--保障數據庫安全