SQLServer數據庫權限設置--保障數據庫安全

一.登錄界面引入數據庫

下圖爲SQL Server的登錄界面。安全

1)服務器名稱:「.」表明本地計算機,選擇下拉框,能夠看見還有一個與本機機名相同的內容,也表明於本地服務器鏈接;要鏈接遠程服務器的話,在此處填寫遠程IP地址;服務器

2)身份驗證:身份驗證下拉框內容爲」Windows 身份驗證「和 」SQLServer 身份驗證「兩種登錄方式,這就是登錄帳戶。antd

  」Windows 身份驗證「:適合於Windows平臺用戶,不須要提供密碼和Windows集成驗證;學習

  」SQLServer 身份驗證「:適合於非Windows平臺用戶或Internet用戶,須要提供登錄帳號和登錄密碼;帳號sa就屬於該種登錄帳戶,是一個超級管理員登錄帳號。spa

3)sa登錄帳號.net

  sa是一個超級登錄帳號,咱們使用他後,能夠看見數據庫服務器中的全部數據庫,及各數據庫中全部的表,擁有着管理數據庫服務器的全部權限,剛學習.net程序開發的時候,應用程序,會使用該帳號鏈接數據庫,由於該帳號的特殊性,使得咱們在開發程序時,使用該帳號,對數據庫安全性極其不安全(由於能夠看到全部的數據庫,數據表,並能對數據庫進行增刪改操做)。爲此,在程序開發中,有必要經過添加新的登錄帳號,添加對應的數據庫用戶,並對數據庫用戶設置不一樣的權限,以保證數據庫及數據的安全性。code

  下面內容主要說明怎樣建立登錄帳號,建立數據庫用戶,及對數據庫用戶授予權限。server

 

 二.登錄帳號添加與刪除對象

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

 

 五.補充說明

  登錄帳號和數據庫及數據庫用戶的關係

  登錄帳號和數據庫用戶是一對多的關係,數據庫用戶和數據庫是一對一的關係。一個登錄帳號,能夠有多個數據庫用戶,而一個數據庫用戶只能與一個數據庫對應。

 


說明:

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

相關文章
相關標籤/搜索