1. 程式人生 > >SQLServer資料庫許可權設定--保障資料庫安全

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'--刪除角色

 

 五.補充說明

  登陸賬號和資料庫及資料庫使用者的關係

  登陸賬號和資料庫使用者是一對多的關係,資料庫使用者和資料庫是一對一的關係。一個登陸賬號,可以有多個數據庫使用者,而一個數據庫使用者只能與一個數據庫對應。

 


說明:

  以上內容為本人學習過程中整理,可能有知識點不全,或理解不足之處,請大家多多留言指教。