關於對錶的讀寫權限的控制示例演示

前言:

      說數據庫權限控制,首先簡單瞭解下數據庫中存在的兩種角色:服務器角色和數據庫角色。

      服務器角色:

內置服務器角色 說明
sysadmin 系統管理員,擁有sql server所有的權限許可。
serveradmin 服務器管理員,管理sql server服務器端設置
setupadmin 設置管理員,管理鏈接服務器和啓動過程,建立數據庫複製以及管理擴展存儲過程
securityadmin 安全管理員,管理登錄和create database權限,讀取錯誤日誌和更改密碼
processadmin 進程管理員,管理在sql server中運行的進程
dbcreator 數據庫創建者,創建、更改和刪除數據庫
diskadmin 磁盤管理員,管理磁盤文件
bulkadmin 可執行大容量數據添加操作語句(bulk insert)

       數據庫角色:

內置數據庫角色 說明
public 爲數據庫用戶維護默認的許可權限,每個用戶都是public角色的成員
db_owner 數據庫所有者
db_accessadmin 數據庫訪問管理員,可添加或刪除數據庫用戶
db_ddladmin 數據庫DDL管理員,可添加、修改或除去數據中的對象
db_securityadmin 數據庫安全管理員,管理數據庫的角色和成員、管理數據庫中語句和對象的權限
db_backupoperator 數據庫備份操作員
db_datareader 數據庫數據讀取者
db_datawritter 數據庫數據寫入者,可添加、更改或刪除數據庫中的所有數據
db_denydatareader 數據庫拒絕數據讀取者
db_denydatawriter 數據庫拒絕數據寫入者

          服務器角色控制服務器級別的權限,數據庫角色控制數據庫內數據對象的權限。在數據庫中,存在兩種賬戶,一個是登陸賬戶,一個是數據庫用戶,兩者區別顯而易見。

登陸賬戶是登陸到服務器,雖然具備對服務器具有相應的權限,並不意味着登陸賬戶對數據庫就有相應的權限。當一個用戶想訪問數據庫內的數據對象時,這時候數據庫用戶就發揮作用,因爲數據庫用戶可以對相應數據庫具有一定的操作權限,那麼sqlserver中,只要在數據庫中添加相應的數據庫用戶,使其關聯到指定的登陸賬戶,即可實現登陸賬戶訪問具體的數據庫,通過對數據庫用戶授權來控制登陸賬戶的權限。

在Sql server中,有兩個默認的數據庫用戶,即dbo和guest。dbo用戶存在於每個數據庫下,是數據庫管理員,它對應的登錄賬戶是sa,如果某個sql server登錄賬戶是sysadmin角色的成員並且該賬戶沒有映射用戶賬戶時,系統將自動將其映射爲每個數據庫中的dbo用戶。guest用戶則默認被加入到master、tempdb等系統數據庫中。


實例演示:

環境說明:

Microsoft SQL Server 2005 - 9.00.1399.06 (X64) 
	Oct 14 2005 00:35:21 
/*	Copyright (c) 1988-2005 Microsoft Corporation
	Developer Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1)
*/

sqlserver中有數據庫testdb,數據庫中有表test1 ,test2

test1(col1,col2)

test2(col1,clo2)

創建代碼如下:

if not exists(select * from sys.databases where name='testdb')
create database testdb
go

use testdb
go

create table test1
(col1 int,
 col2 int
)

go

create table test2
(
 col1 int,
 col2 int
)

insert into test1
select 0,1 union
select 2,3 union
select 4,5

insert into test2
select 2,4 union
select 3,5 union
select 6,6


management studio->安全性->登陸名-》右擊

分別新建兩個登陸賬戶:login1,login2 




需求:

       1) 通過權限控制,實現: login1對testdb中test1只有select權限

       2)精確控制login2僅對test2中的某一列有select權限

上述準備工作做好後:

第一步:

 在testdb數據庫下->安全性->用戶-》右擊

分別建立user1,user2

user1關聯登陸賬戶login1

user2關聯登陸賬戶login2

參考如下圖:



數據庫用戶user2設置同user1,參考上圖,這裏就不截圖了

未對user1授權時,通過login1登陸到服務器,並建立對testdb數據庫的查詢

結果如下:


第二步,開始對user1,user2設置權限:

設置user1的權限


確定後,如下圖:


確定後,我們就可以看到test1,test2了,點擊test1,勾選授予select,點擊test2勾選deny select權限具體如下圖:



此時我們再執行select時,結果如下:



2)如果要控制user2只能訪問test2的col2而不能訪問col1,除了對user2設置上述操作外,我們還應該設置如下:


以login2登陸服務器後運行結果如下:



總結:

         個人覺得,總體把握sqlserver的授權機制比較重要,比如一個登陸賬戶是要關聯到對應的數據庫用戶才能訪問數據庫,具體對數據庫有沒什麼權限,取決於數據庫用戶是什麼數據庫角色的成員。把這個問題弄清楚了,很多設置其實思路應該就清晰多了。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章