sqlserver對象許可權
① 在sqlserver用戶驗證模式中什麼用戶是內置的默認管理員
1、salogin是伺服器級別的特殊安全主體,登錄名是sa,是伺服器級別的SQLLOGIN。默認情況下,在安裝SQLServer實例時,salogin就被創建了。從SQLServer2005開始,salogin的默認資料庫是master,並且是sysadmin角色的成員,因此salogin擁有伺服器的最高許可權,並且許可權不能被限制。雖然salogin不能被刪除,但是可以禁用。一旦sa被禁用,任何人都無法使用salogin來管理SQLServer實例。
2、在資料庫級別,SQLServer在每個資料庫中都預先創建了兩個特殊的用戶:dbo和guest,在每個資料庫中都有這兩個用戶(User)。
3、dbo(databaseowner的簡稱):是WINDOWS_USER,資料庫的所有者(Owner),每個資料庫都有一個dbo用戶,SQLServer把固定伺服器角色sysadmin的成員、salogin和資料庫的owner都映射到資料庫用戶dbo上。
4、guest:賓客,是SQL_USER,對於任何沒有映射到資料庫用戶的有效登陸(Login),SQLServer使用guest賬戶登陸資料庫。在登陸資料庫之前,需要分配許可權給guest,一般給guest查看(select)資料庫對象的許可權,默認情況下,guest是沒有登錄資料庫的許可權。
② 怎樣設置SQL Server的用戶及許可權
1
-- SQLServer:
一、操作步驟
首先進入資料庫級別的【安全性】-【登錄名】-【新建登錄名】
(圖1:新建登錄名)
2. 在【常規】選項卡中,如下圖所示,創建登陸名,並設置默認的資料庫。
(圖2:設置選項)
3. 在【用戶映射】選項卡中,如下圖所示,勾選需要設置的資料庫,並設置【架構】,點擊【確認】按鈕,完成創建用戶的操作
(圖3:選擇對應資料庫)
4. 現在我們就可以對TestLog資料庫中的User表進行許可權的設置了,【表】-【 屬性】
(圖4:選擇對應表)
5. 在【許可權】選項卡中,如下圖所示,依此點擊【添加】-【瀏覽】-【選擇對象】
(圖5:設置訪問表的用戶)
6. 在上面點擊【確認】後,我們就可以下面的列表中找到對應的許可權,如果你還想細化到列的許可權的話,右下角還有一個【列許可權】的按鈕可以進行設置,點擊【確認】按鈕就完成了這些許可權的設置了
(圖6:許可權列表)
7. 現在就使用TestUser用戶登陸資料庫了,登陸後如下圖所示,現在只能看到一個表了
(圖7:效果)
二、注意事項
在上面的第3步驟中需要注意:如果這里沒有選擇對應的資料庫的話,之後去TestLog資料庫中是找不到TestUser。
(圖8:找不到TestUser用戶)
2. 在上面的第3步驟,設置完TestLog數據後,需要點擊【確認】按鈕,完成創建用戶操作,如果這個時候去設置【安全對象】,是無法在【添加】-【特定對象】-【對象類型】-【登陸名】-【瀏覽】中找到剛剛新建的TestUser用戶的。
3. 其實在資料庫級別的【安全性】創建的用戶是屬於全局的,當設置了某個資料庫,比如TestLog之後,這個用戶就會出現在這個資料庫的【安全性】列表中。 如果刪除TestLog這個用戶,會出現下面的提示。刪除了後,這個用戶就無法登陸了。需要去對應的資料庫中刪除用戶,如果沒有刪除又創建,是會報錯的。
(圖9:刪除TestUser用戶)
4. 在第6步的【顯式許可權】列表中,如果選擇了【Control】這個選項,那麼在【Select】中設置查詢【列許可權】就沒有意義了,查詢就不會受限制了。如果設置【列許可權】,在正常情況下會顯示下圖的報錯信息:
(圖10:效果)
5. 在TestLog資料庫的【安全性】-【TestUser】-【屬性】-【安全對象】-【添加】-【對象類型】這里有更多關於資料庫級別的一些對象類型可以設置。
(圖11:其它對象類型)
③ 請問在SQLServer 2000中用戶和角色的區別以及對象許可權和語句許可權的區別。麻煩用規范語言作答。
/*--示例說明
示例在資料庫pubs中創建一個擁有表jobs的所有許可權、擁有表titles的SELECT許可權的角色r_test
隨後創建了一個登錄l_test,然後在資料庫pubs中為登錄l_test創建了用戶賬戶u_test
同時將用戶賬戶u_test添加到角色r_test中,使其通過許可權繼承獲取了與角色r_test一樣的許可權
最後使用DENY語句拒絕了用戶賬戶u_test對表titles的SELECT許可權。
經過這樣的處理,使用l_test登錄SQL Server實例後,它只具有表jobs的所有許可權。
--*/
USE pubs
--創建角色 r_test
EXEC sp_addrole 'r_test'
--授予 r_test 對 jobs 表的所有許可權
GRANT ALL ON jobs TO r_test
--授予角色 r_test 對 titles 表的 SELECT 許可權
GRANT SELECT ON titles TO r_test
--添加登錄 l_test,設置密碼為pwd,默認資料庫為pubs
EXEC sp_addlogin 'l_test','pwd','pubs'
--為登錄 l_test 在資料庫 pubs 中添加安全賬戶 u_test
EXEC sp_grantdbaccess 'l_test','u_test'
--添加 u_test 為角色 r_test 的成員
EXEC sp_addrolemember 'r_test','u_test'
--拒絕安全賬戶 u_test 對 titles 表的 SELECT 許可權
DENY SELECT ON titles TO u_test
/*--完成上述步驟後,用 l_test 登錄,可以對jobs表進行所有操作,但無法對titles表查詢,雖然角色 r_test 有titles表的select許可權,但已經在安全賬戶中明確拒絕了對titles的select許可權,所以l_test無titles表的select許可權--*/
--從資料庫 pubs 中刪除安全賬戶
EXEC sp_revokedbaccess 'u_test'
--刪除登錄 l_test
EXEC sp_droplogin 'l_test'
--刪除角色 r_test
EXEC sp_droprole 'r_test'
首先,做好用戶安全:
--簡單的,只允許sql的用戶訪問sql(防止利用administrator組用戶訪問)
1.企業管理器--右鍵SQL實例--屬性--安全性--身份驗證--選擇"sql server和windows"--確定
2.企業管理器--安全性--登陸--右鍵sa--設置密碼--其他用戶也設置密碼
3.刪除用戶:
BUILTIN\Administrators
<機器名>\Administrator --這個用戶不一定有
這樣可以防止用windows身份登陸SQL
4.設置進入企業管理器需要輸入密碼
在企業管理器中
--右鍵你的伺服器實例(就是那個有綠色圖標的)
--編輯SQL Server注冊屬性
--選擇"使用 SQL Server 身份驗證"
--並勾選"總是提示輸入登錄名和密碼"
--確定
--經過上面的設置,你的SQL Server基本上算是安全了.
------------------------------------------------------------------------
其次,改默認埠,隱藏伺服器,減少被攻擊的可能性
SQL Server伺服器
--開始
--程序
--Microsoft SQL Server
--伺服器網路實用工具
--啟用的協議中"TCP/IP"
--屬性
--默認埠,輸入一個自已定義的埠,比如2433
--勾選隱藏伺服器
----------------------------------------------------------------------------
--管好sql的用戶,防止訪問他不該訪問的資料庫(總控制,明細還可以控制他對於某個資料庫的具體對象具有的許可權)
--切換到你新增的用戶要控制的資料庫
use 你的庫名
go
--新增用戶
exec sp_addlogin 'test' --添加登錄
exec sp_grantdbaccess N'test' --使其成為當前資料庫的合法用戶
exec sp_addrolemember N'db_owner', N'test' --授予對自己資料庫的所有許可權
--這樣創建的用戶就只能訪問自己的資料庫,及資料庫中包含了guest用戶的公共表
go
--刪除測試用戶
exec sp_revokedbaccess N'test' --移除對資料庫的訪問許可權
exec sp_droplogin N'test' --刪除登錄
如果在企業管理器中創建的話,就用:
企業管理器--安全性--右鍵登錄--新建登錄
常規項
--名稱中輸入用戶名
--身份驗證方式根據你的需要選擇(如果是使用windows身份驗證,則要先在操作系統的用戶中新建用戶)
--默認設置中,選擇你新建的用戶要訪問的資料庫名
伺服器角色項
這個裡面不要選擇任何東西
資料庫訪問項
勾選你創建的用戶需要訪問的資料庫名
資料庫角色中允許,勾選"public","db_ownew"
確定,這樣建好的用戶與上面語句建立的用戶一樣
---------------------------------------------------------------------------
最後一步,為具體的用戶設置具體的訪問許可權,這個可以參考下面的最簡示例:
--添加只允許訪問指定表的用戶:
exec sp_addlogin '用戶名','密碼','默認資料庫名'
--添加到資料庫
exec sp_grantdbaccess '用戶名'
--分配整表許可權
GRANT SELECT , INSERT , UPDATE , DELETE ON table1 TO [用戶名]
--分配許可權到具體的列
GRANT SELECT , UPDATE ON table1(id,AA) TO [用戶名]
-------------------------------------------------------------------
至於具體的安全設置和理論知道,參考SQL聯機幫助
④ 怎麼給sqlserver的用戶添加許可權
grant 許可權 on 資料庫對象 to 用戶
例如 grant select on employee to user
給user這個用戶對表employee的查詢許可權
grant all privileges on testdb to user
給user這個用戶對資料庫testdb 的所有許可權
⑤ sqlserver 在對象上的許可權設置有哪些動作分別是什麼意義
以下粘貼自SQL Server 的幫助信息,文字太多不能貼全,你自己可在幫助中查到更多信息。
-----------------------------
每個 SQL Server 安全對象都有可以授予主體的關聯許可權。本主題提供了下列信息:
許可權命名約定
與特定的安全對象相關的許可權
SQL Server 許可權
許可權檢查演算法
示例
許可權命名約定
下面介紹命名許可權時遵循的一般約定:
CONTROL
為被授權者授予類似所有權的功能。被授權者實際上對安全對象具有所定義的所有許可權。也可以為已被授予 CONTROL
許可權的主體授予對安全對象的許可權。因為 SQL Server 安全模型是分層的,所以 CONTROL 許可權在特定范圍內隱含著對該范圍內的所有安全對象的
CONTROL 許可權。例如,對資料庫的 CONTROL
許可權隱含著對資料庫的所有許可權、對資料庫中所有組件的所有許可權、對資料庫中所有架構的所有許可權以及對資料庫的所有架構中的所有對象的許可權。
ALTER
授予更改特定安全對象的屬性(所有權除外)的許可權。當授予對某個范圍的 ALTER
許可權時,也授予更改、創建或刪除該范圍內包含的任何安全對象的許可權。例如,對架構的 ALTER 許可權包括在該架構中創建、更改和刪除對象的許可權。
ALTER ANY
<伺服器安全對象>,其中的伺服器安全對象可以是任何伺服器安全對象。
授予創建、更改或刪除伺服器安全對象的各個實例的許可權。例如,ALTER
ANY LOGIN 將授予創建、更改或刪除實例中的任何登錄名的許可權。
ALTER ANY
<資料庫安全對象>,其中的資料庫安全對象可以是資料庫級別的任何安全對象。
授予創建、更改或刪除資料庫安全對象的各個實例的許可權。例如,ALTER
ANY SCHEMA 將授予創建、更改或刪除資料庫中的任何架構的許可權。
TAKE OWNERSHIP
允許被授權者獲取所授予的安全對象的所有權。
IMPERSONATE <登錄名>
允許被授權者模擬該登錄名。
IMPERSONATE <用戶>
允許被授權者模擬該用戶。
CREATE <伺服器安全對象>
授予被授權者創建伺服器安全對象的許可權。
CREATE <資料庫安全對象>
授予被授權者創建資料庫安全對象的許可權。
CREATE
<包含在架構中的安全對象>
授予創建包含在架構中的安全對象的許可權。但是,若要在特定架構中創建安全對象,必須對該架構具有
ALTER 許可權。
VIEW DEFINITION
允許被授權者訪問元數據。
REFERENCES
表的 REFERENCES 許可權是創建引用該表的外鍵約束時所必需的。
對象的 REFERENCES
許可權是使用引用該對象的 WITH SCHEMABINDING 子句創建 FUNCTION 或 VIEW
時所必需的。
適用於特定安全對象的許可權
下表列出了主要的許可權類別以及可應用這些許可權的安全對象的種類。
許可權
適用於
SELECT
同義詞
表和列
表值函數 [Transact-SQL 和公共語言運行時 (CLR)] 和列
視圖和列
VIEW CHANGE TRACKING
表
架構
UPDATE
同義詞
表和列
視圖和列
REFERENCES
標量函數和聚合函數(Transact-SQL 和 CLR)
Service Broker 隊列
表和列
表值函數(Transact-SQL 和 CLR)和列
視圖和列
INSERT
同義詞
表和列
視圖和列
DELETE
同義詞
表和列
視圖和列
EXECUTE
過程(Transact-SQL 和 CLR)
標量函數和聚合函數(Transact-SQL 和 CLR)
同義詞
CLR 類型
RECEIVE
Service Broker 隊列
VIEW DEFINITION
過程(Transact-SQL 和 CLR)
Service Broker 隊列
標量函數和聚合函數(Transact-SQL 和 CLR)
同義詞
表
表值函數(Transact-SQL 和 CLR)
視圖
ALTER
過程(Transact-SQL 和 CLR)
標量函數和聚合函數(Transact-SQL 和 CLR)
Service Broker 隊列
表
表值函數(Transact-SQL 和 CLR)
視圖
TAKE OWNERSHIP
過程(Transact-SQL 和 CLR)
標量函數和聚合函數(Transact-SQL 和 CLR)
同義詞
表
表值函數(Transact-SQL 和 CLR)
視圖
CONTROL
過程(Transact-SQL 和 CLR)
標量函數和聚合函數(Transact-SQL 和 CLR)
Service Broker 隊列
同義詞
表
表值函數(Transact-SQL 和 CLR)
視圖
⑥ SQLServer安全規劃全攻略的分配許可權
實施安全策略的最後一個步驟是創建用戶定義的資料庫角色,然後分配許可權。完成這個步驟最簡單的方法是創建一些名字與全局組名字配套的角色。例如對於前面例子中的會計系統,我們可以創建Accounting Data Entry Operators、Accounting Data Entry Managers之類的角色。
只要規劃得恰當,你能夠在域控制器上完成所有的訪問和許可權維護工作,使得伺服器反映出你在域控制器上進行的各種設置調整。雖然實際應用中情況可能有所變化,但本文介紹的基本措施仍舊適用,它們能夠幫助你構造出很容易管理的安全策略。¬
由於會計資料庫中的角色與帳務處理任務有關,你可能想要縮短這些角色的名字。然而,如果角色名字與全局組的名字配套,你可以減少混亂,能夠更方便地判斷出哪些組屬於特定的角色。
創建好角色之後就可以分配許可權。在這個過程中,我們只需用到標準的GRANT、REVOKE和DENY命令。但應該注意DENY許可權,這個許可權優先於所有其他許可權。如果用戶是任意具有DENY許可權的角色或者組的成員,SQL Server將拒絕用戶訪問對象。
接下來我們就可以加入所有SQL Server驗證的登錄。用戶定義的資料庫角色可以包含SQL Server登錄以及NT全局組、本地組、個人帳戶,這是它最寶貴的特點之一。用戶定義的資料庫角色可以作為各種登錄的通用容器,我們使用用戶定義角色而不是直接把許可權分配給全局組的主要原因就在於此。
由於內建的角色一般適用於整個資料庫而不是單獨的對象,因此這里建議你只使用兩個內建的資料庫角色,,即db_securityadmin和db_owner。其他內建資料庫角色,例如db_datareader,它授予對資料庫裡面所有對象的SELECT許可權。
雖然你可以用db_datareader角色授予SELECT許可權,然後有選擇地對個別用戶或組拒絕SELECT許可權,但使用這種方法時,你可能忘記為某些用戶或者對象設置許可權。一種更簡單、更直接而且不容易出現錯誤的方法是為這些特殊的用戶創建一個用戶定義的角色,然後只把那些用戶訪問對象所需要的許可權授予這個用戶定義的角色。
⑦ sqlserver 創建資料庫的許可權是哪個
在實例節點下有一個節點叫做安全性,打開安全性,下面有節點叫做伺服器角色。
如果想創建資料庫,需要這個login是dbcreator角色。
⑧ 與SQL SERVER 安全控制相關的幾點說明
與SQL SERVER安全控制相關的幾點說明
(一)幾個基本術語
身份驗證(Authentication)是指通過提交伺服器評估的憑據以登錄到主體請求訪問的 SQL Server 的過程。身份驗證可以確定接受身份驗證的用戶或進程的標識。
用戶、賬戶、賬號、登錄名、[資料庫]用戶名
用戶是指能夠在SQL Server安全機制下,訪問資料庫對象中的數據的操作員或客戶。用戶若要訪問資料庫對象,必須獲得資料庫管理員(DBA)分配的賬號和密碼。從SQL Server管理系統的角度來看,用戶就是一組匹配的賬戶和密碼。
賬戶和賬號是一個概念的不同說法,在伺服器中的賬戶又叫登錄名(Login Name),因此訪問伺服器也稱為登錄伺服器。伺服器的登錄名可以映射到資料庫中成為[資料庫]用戶名(User Name)。一個登錄名可以映射多個資料庫用戶,而一個用戶只能映射一個登錄名。
連接或登錄SQL Server伺服器時是用的登錄名而非用戶名登錄的,程序裡面的連接字元串中的用戶名也是指登錄名。
通常用戶名與登錄名相同(不是強制相同,但為了一目瞭然通常都在創建用戶名時使用與登錄名相同的名字)。
提示:登錄名(Login Name)和用戶名(User Name)是兩個不同的概念:
登錄名:伺服器方的一個實體,登錄名只能進入SQL Server伺服器,但是不能讓用戶訪問伺服器中的資料庫資源。
用戶名:一個或多個登錄對象在資料庫中的映射,可以對用戶對象進行授權,以便為登錄對象提供對資料庫的訪問許可權。
登錄名作用於它所在的伺服器。每個登錄名的定義存放在master系統資料庫的syslogins表中。
用戶名作用於它所在的資料庫。用戶定義信息存放在每個資料庫的sysusers表中。用登錄名登錄到SQL Server後,在訪問操作各個資料庫時,SQL Server會自動查詢此資料庫中是否存在與此登錄名關聯的用戶名,若存在就使用此用戶的許可權訪問此資料庫,若不存在就是用guest用戶訪問此資料庫(guest是一個特殊的用戶名,後面會講到)。
SQL身份驗證:適合於非windows平台的用戶或Internet用戶,需要提供賬戶和密碼。
Windows身份驗證:適合於windows平台用戶,利用Windows賬戶和windows集成驗證,不需要提供密碼。
用戶想要操作資料庫的某個對象(如某張表)需要過三關:
第一關:我們需要登錄到SQL Server系統,即需要登錄賬戶;
第二關:我們需要訪問某個資料庫,即需要該資料庫的用戶賬戶;
第三關:我們需要訪問資料庫中的某個對象(如某張表),需要有該對象的許可權。
主體(principal)是可被授予對安全資源的訪問許可權的實體(例如登錄名、用戶、進程、組或角色)。主體可以是主體的集合(比如資料庫角色或Windows組)或不可分割的主體(比如本地登錄或域登錄)。每個主體都具有一個 ID (identification)和一個安全 ID (SID)。
⊙ Windows級別的主體:Windows組、Windows域登錄名、Windows本地登錄名。
⊙ SQL Server級的主體:伺服器角色、SQLServer登錄名。
⊙資料庫級的主體:資料庫角色、資料庫用戶、應用程序角色。
上下文切換 (context switch),更改檢查執行語句或執行操作的許可權時所依據的標識。
伺服器(server)
1)指安裝了SQL SERVER的計算機。2)指SQL Server實例——計算機上運行的 SQLServer的副本。3)指為用戶提供服務的計算機軟體或組件。
需要根據上下文理解。
注冊伺服器
注冊伺服器使您可以存儲伺服器連接信息(伺服器的類型、伺服器的名稱、登錄到伺服器時使用的身份驗證的類型等),以供將來連接時使用——下次連接該伺服器時,不需要重新輸入登錄信息。
SQLServer 2000在SQL Server企業管理器中注冊伺服器,才能使用 SQL Server企業管理器來管理這些伺服器。從SQLServer 2005始,在 SQL ServerManagement Studio 中注冊伺服器,才能使用 SQL Server Management Studio 來管理這些伺服器。
在 Microsoft SQL Server中,可以注冊以下類型的伺服器:SQLServer資料庫引擎、Analysis Services、Reporting Services、IntegrationServices和 SQL Server Compact 3.5SP1。
(二)SQL Server實例(SQL Server instance)
SQLServer實例(SQL Server instance),簡稱實例 (instance),是計算機上運行的SQLServer 的副本。同一台計算機上可以安裝運行的多個 SQLServer副本。每個SQL Server實例都包含資料庫引擎、Analysis Services和 ReportingServices的 SQL Server,每個SQL Server資料庫實例各有一套不為其他實例共享的系統及用戶資料庫。
資料庫引擎是用於存儲、處理和保護數據的核心服務。利用資料庫引擎可控制訪問許可權並快速處理事務。
實例又分為「默認實例」(default instance)和「命名實例」(namedinstance),如果在一台計算機上安裝第一個SQLSERVER,命名設置保持默認的話,那這個實例就是默認實例。默認實例與安裝計算機具有相同名稱。命名實例指安裝SQL Server時給定了名稱,可以安裝多個命名實例,給定名稱是為了與同一台計算機上的其他命名實例和默認實例區分開。
SQLServer應用程序可以通過僅指定伺服器名稱而連接到 SQLServer的默認實例。SQL Server應用程序在連接到伺服器上的某個命名實例時必須既指定伺服器名稱又指定實例名稱,計算機名稱\實例名稱。
一台計算機上最多隻有一個默認實例,也可以沒有默認實例,默認實例名與計算機名相同。如果要訪問本機上的默認SQL伺服器實例,使用計算機名、(local)、localhost、127.0.0.1、.、本機IP地址,都可以達到相同的目的。但如果要訪問非本機的SQL伺服器,那就必須使用計算機名稱\實例名稱。
默認實例和命名實例的區別:
1、服務中服務名稱的區別:
(1)默認實例:MSSQLSERVER。
(2)有名命名實例:實列名為benet,在服務中的名稱是MSSQL$BENET。
註:如果你有多個實例的時候會在服務中出現多個服務名稱。
2、連接到查詢分析器或探查器的時候區別:
(1)默認實例可以使用:「.」(點)、「(local)」、「計算機名稱」。
(2)實例名稱:計算機名pcname,實例名benet,連接時使用的名稱是pcname\benet。
(三)安全對象和許可權
安全對象(Securable),可以通過許可權得到保護的實體。是SQLServer資料庫引擎授權系統控制對其進行訪問的資源。如表、視圖、觸發器等。
SQLServer中將安全對象分為三個層次,分別為:
⊙伺服器層級,包含的安全對象:端點、登錄、伺服器角色、資料庫。
⊙資料庫層級,包含的安全對象:用戶、資料庫角色、應用程序角色、程序集、消息類型、路由、服務、遠程服務綁定、全文目錄、證書、非對稱密鑰、對稱密鑰、約定、架構。
⊙構架(SCHEMA)層級,包含的安全對象:類型、XML架構集合、對象(函數、過程、同義詞、表、視圖)
這三個層級是從上到下包含的,級別從高到低。
說明:端點(endpoint)為伺服器級安全對象。Microsoft SQL Server 2005 中的連接管理基於「端點」。一個端點就是一個SQL Server對象,它能夠使 SQL Server在網路中通信。對於資料庫鏡像,伺服器實例需要有自己專用的「資料庫鏡像端點」。此端點用途特殊,專門用於接收來自其他伺服器實例的資料庫鏡像連接。
許可權 (permission),與對象關聯的規則,用來規定哪些用戶可以獲得該對象的訪問許可權以及方式如何。對安全對象的訪問通過授予或拒絕許可權進行控制。
許可權可以明確用戶能夠使用哪些資料庫對象,並對它們進行何種操作。用戶在資料庫內的許可權取決於用戶賬號的許可權和該用戶所屬的角色的許可權。
提示:在設置許可權時,尤其要注意許可權在安全對象上的繼承關系。對於高級別安全對象上設置的許可權,會被自動繼承到低級別安全對象上。
理解許可權的繼承和許可權的覆蓋會在設置許可權時減少很多問題,最佳方法是統籌規劃,上機驗證。
(四)架構(schema)
架構是指包含表、視圖、過程等的容器。它位於資料庫內部,而資料庫位於伺服器內部。這些實體就像嵌套框放置在一起。伺服器是最外面的框,而架構是最裡面的框。架構包含表、視圖、過程、函數、同義詞、類型、隊列、XML架構集合等安全對象。
注意:
在 SQL Server 2000和早期版本中,資料庫可以包含一個名為「架構」的實體, SQL Server 2000包含 CREATE SCHEMA語句,但此實體實際上是所有者(創建對象時的用戶)。在 SQL Server 2005 開始,架構既是一個容器,又是一個命名空間。任何用戶都可以擁有架構,並且架構所有權可以轉移。從 SQL Server 2005開始,每個用戶都擁有一個默認架構。可以使用 CREATE USER或 ALTER USER的 DEFAULT_SCHEMA選項設置和更改默認架構。如果未定義 DEFAULT_SCHEMA,則資料庫用戶將使用 dbo作為默認架構。
在SQL Server 2000中,DataBaseName.dbo.TableName解釋為:資料庫名.所有者.表名。
從 SQL Server 2005開始,DataBaseName.dbo.TableName解釋為:資料庫名.架構名.表名。
在SQL Server 2000中,資料庫對象全稱是server_name.[database_name].[owner_name].object_name
從SQL Server 2005始,資料庫對象全稱是server_name.[database_name].[schema_name].object_name
在SQL SERVER2000或以前版本中創建一個對象,對象必須要有一個所有者(owner)。對象是如何屬於某個所有者的呢?這依賴於創建對象時的用戶。您不能取消對象所有者(object owner)的特權(privileges)。對象所有者可以執行任何與對象有關的操作(例如 INSERT、UPDATE、DELETE、SELECT或 EXECUTE),也可以管理對象的許可權。
從2005/2008後,一個我們必須重新認識的情況是對象不再有所有者(owner)。架構包含對象,架構有所有者。
在2005前(如SQL Server 2000中),沒有架構的概念,只有用戶的概念,那時候DBO是默認用戶。到了2005,有了架構概念,但是為了向後兼容,保留了DBO,並且把DBO作為默認架構,在不指定架構的情況下,默認為dbo,「默認架構」的概念,用於解析未使用其完全限定名稱引用的對象的名稱。在 SQL Server 2005 中,每個用戶都有一個默認架構,用於指定伺服器在解析對象的名稱時將要搜索的第一個架構。可以使用 CREATE USER和 ALTER USER的 DEFAULT_SCHEMA選項設置和更改默認架構。如果未定義 DEFAULT_SCHEMA,則資料庫用戶將把 DBO作為其默認架構。
(五)dbo
dbo既是默認架構,也是默認用戶。在SQL Server 2000中,dbo作為默認用戶。在SQL Server2005中,dbo既作為默認用戶,也作為默認架構(如圖)。
dbo作為默認用戶,dbo (DataBase Owner,資料庫的所有者,擁有資料庫中的所有對象),每個資料庫都有dbo, sysadmin伺服器角色的成員自動映射成dbo,無法刪除 dbo用戶,且此用戶始終出現在每個資料庫中。通常,登錄名sa映射為庫中的用戶dbo。另外,固定伺服器角色 sysadmin的任何成員都映射到每個資料庫內稱為 dbo的一個特殊用戶上。由固定伺服器角色sysadmin的任何成員創建的任何對象都自動屬於 dbo。由固定伺服器角色 sysadmin的任何成員或 dbo用戶創建的任何對象都自動屬於dbo,由任何其他用戶(包括 db_owner固定資料庫角色成員)創建的對象,屬於創建該對象的用戶,而不是 dbo,用創建該對象的用戶名限定。例如:
如果用戶 Andrew是固定伺服器角色sysadmin的成員,並創建表 T1,則表 T1屬於 dbo,並以 dbo.T1而不是 Andrew.T1進行限定。相反,如果 Andrew不是固定伺服器角色sysadmin的成員,而只是固定資料庫角色 db_owner的成員,並創建表 T1,則 T1屬於 Andrew,並限定為Andrew.T1。該表屬於 Andrew,因為該成員沒有將表限定為dbo.T1。
dbo作為默認架構,在不指定架構的情況下,默認為dbo,「默認架構」的概念,用於解析未使用其完全限定名稱引用的對象的名稱。在 SQL Server 2005 中,每個用戶都有一個默認架構,用於指定伺服器在解析對象的名稱時將要搜索的第一個架構。可以使用 CREATE USER和 ALTER USER的 DEFAULT_SCHEMA選項設置和更改默認架構。如果未定義 DEFAULT_SCHEMA,則資料庫用戶將把 DBO作為其默認架構。
(六)Guest用戶
guest用戶不需要映射到登錄名。這種用戶賬號是供資料庫中沒有明確授予許可權給已映射至認證用戶使用的。guest供那些已經成功登錄到SQL SERVER實例,但是卻沒有通過用戶訪問資料庫的許可權的登錄者使用的。
SQLSERVER 2000中guest用戶可以刪除;而2005/2008中是不能刪除的,卻可以取消CONNECT許可權,而且為安全起見,所有用戶定義的資料庫中預設情況下guest用戶的許可權都是被取消了的,可在除master和tempdb之外的任何資料庫中禁用Guest用戶。
在SQL SERVER 2000中,新建的資料庫中沒有Guest用戶,但可以添加它,也可刪除它,添加與刪除方法與普通資料庫相同。
在SQL Server 2005或以上版本中GUEST已經默認存在於每個資料庫中,但默認情況下,會在新資料庫中禁用GUEST用戶(在「對象資源管理器→安全性→登錄」節點中圖標上有禁用標識),我們可以通過以下語句啟用GUEST用戶:GRANT CONNECT TO GUEST 。當你決定不再想讓該資料庫被非資料庫授權的用戶以GUEST身份進行訪問時,可以再次將GUEST帳號禁用。值得一提的是,GUEST用戶在資料庫中不能被刪除,我們只能通過以下語句禁用GUEST用戶:REVOKE CONNECT FROMGUEST 。
在SQL SERVER 2000中,要允許guest用戶帳戶訪問資料庫,可以像添加其它資料庫用戶那樣添加它,如:
USE<Database Name>
GO
EXECsp_grantdbaccess 'guest'
GO
在SQL SERVER 2005中,允許guest用戶帳戶
USE<Database Name>
GO
GRANT CONNECT TO GUEST
GO
需要提醒的是,對於是否添加Guest用戶要謹慎權衡利弊。
--SQLServer 2000刪除guest用戶賬號
USE<Database Name>
GO
EXECsp_revokedbaccess 'guest'
GO
-- SQLServer 2005禁用guest用戶賬號
USE<Database Name>
GO
REVOKECONNECT FROM GUEST
GO
(七)sa登錄名
SQLServer的 sa登錄名是伺服器級的主體。默認情況下,該登錄名是在安裝實例時創建的。在 SQL Server 2005和 SQL Server2008中,sa的默認資料庫為 master。這是對早期版本的 SQLServer的行為的更改。
sa(system administrator系統管理員)是為向後兼容而提供的特殊登錄。sysadmin是一種角色。該角色能夠執行SQLServer上的任何操作。本質上,任何具有這種角色成員身份的人都是那個伺服器上的sa。這種伺服器角色的創建為微軟提供了某一天去除sa登錄的能力——實際上,聯機叢書把sa稱作本質上為遺留物的東西。
與以前版本不同,SQL Server 2008,即使是用混合模式安裝,sa也默認禁用。
注意,sa是一個默認的SQL Server登錄名,擁有操作SQL Server系統的所有許可權,該登錄名不能被刪除。當採用混合模式安裝Microsoft SQL Server系統之後,應該為sa指定一個密碼,應為 sa登錄分配一個強密碼(strongpassword)。
sa登錄名會映射到 sysadmin固定伺服器角色,它對整個伺服器有不能撤銷的管理憑據。如果攻擊者以系統管理員的身份獲取了訪問許可權,則可能造成的危害是無法預計的。
(八)其它幾個默認配置的的登錄(Logins)和用戶(Users)
默認配置的的登錄和用戶除了dbo用戶、Guest用戶、sa登錄,還有如下幾個:
Administrators組是一個特殊的登錄。administrator用戶默認administrators組的成員。
Administrators組實際名稱為BUILTIN\Administrators。早期版本,這個組的所有成員均為 sysadmin 角色的成員(這意味著Administrators組中的成員具有最高許可權),但可以從該角色中移除這些成員。與以前版本不同,SQL Server 2008默認情況下,本地 Windows組 BUILTIN\Administrators不再包含在新的 SQL Server 2008安裝上的 SQL Server的 sysadmin固定伺服器角色中。
提示:每個版本的 SQL Server都具有不同的安全功能,默認配置也不盡相同,後出的版本更有利於安全,但安全性和使用方便這兩種需求可能有矛盾的一面,最佳方法是上機了解驗證。
NETWORKSERVICE和SYSTEM登錄賬戶
NETWORKSERVICE和SYSTEM登錄賬戶,實際名稱為NT AUTHORITY\NETWORK SERVICE和NT AUTHORITY\SYSTEM,是否存在這些,依賴於伺服器的配置。如果配置了報表伺服器,將出現NETWORK SERVICE登錄賬戶。
INFORMATION_SCHEMA和sys用戶
INFORMATION_SCHEMA和sys又是SQL Server 預定義的架構(內置架構)名稱,它們與INFORMATION_SCHEMA和sys用戶具有相同的名稱。不能刪除,主要用於向後兼容性。可以使用INFORMATION_SCHEMA用戶和sys用戶訪問INFORMATION_SCHEMA和sys架構的系統視圖,獲取有關資料庫元數據信息。
(九)SQL Server中的角色
角色 (role),是SQL Server用來管理伺服器和資料庫許可權的,是安全帳戶的集合,在管理許可權時可以視為一個單元——作為分配許可權的單位。
SQLServer中的角色分為伺服器級別和資料庫級別角色。
◇伺服器級別角色
伺服器級別角色用於幫助管理伺服器上的許可權。伺服器角色的許可權作用域為伺服器范圍。可以將登錄名(Login Name)添加到伺服器角色。
符合許可權要求的用戶,可以將伺服器級主體(SQL Server登錄名、Windows帳戶和 Windows組)添加到伺服器級角色。固定伺服器角色的每個成員都可以將其他登錄名添加到該同一角色。
固定伺服器角色簡介:
1)sysadmin:系統管理員,角色成員可對SQLServer伺服器進行所有的管理工作,為最高管理角色。這個角色一般適合於資料庫管理員(DBA)。
2)securityadmin:安全管理員,角色成員可以管理登錄名及其屬性。可以授予、拒絕、撤銷伺服器級和資料庫級的許可權。另外還可以重置SQL Server登錄名的密碼。
3)serveradmin:伺服器管理員,角色成員具有對伺服器進行設置及關閉伺服器的許可權。
4)setupadmin:設置管理員,角色成員可以添加和刪除鏈接伺服器,並執行某些系統存儲過程。
5)processadmin:進程管理員,角色成員可以終止SQLServer實例中運行的進程。
6)diskadmin:用於管理磁碟文件。
7)dbcreator:資料庫創建者,角色成員可以創建、更改、刪除或還原任何資料庫。
8)bulkadmin:可執行BULK INSERT語句,但是這些成員對要插入數據的表必須有INSERT許可權。BULK INSERT語句的功能是以用戶指定的格式復制一個數據文件至資料庫表或視圖。
9)在sql server 2005 sp2(補丁)及以後版本,伺服器角色中還可以看到一個public角色。每個 SQL Server登錄名均屬於 public伺服器角色。 如果未向某個伺服器主體授予或拒絕對某個安全對象的特定許可權,該用戶將繼承授予該對象的 public角色的許可權。public伺服器角色默認擁有 VIEW ANY DATABASE(查看任何資料庫)許可權。[VIEW ANY DATABASE許可權控制是否顯示sys.databases和 sys.sysdatabases視圖以及 sp_helpdb系統存儲過程中的元數據(metadata)。]
從 SQL Server 2012開始,您可以創建用戶定義的伺服器角色,並將伺服器級許可權添加到用戶定義的伺服器角色。
每個版本的 SQL Server都具有不同的安全功能,版本越高,功能越強。
可以利用系統函數IS_SRVROLEMEMBER指示當前用戶的 SQLServer登錄名是否是固定伺服器角色的成員。
可以利用系統存儲過程sp_helpsrvrolemember返回有關 SQL Server 固定伺服器角色成員的信息。
--查詢 sysadmin固定伺服器角色的成員。
execsp_helpsrvrolemember 'sysadmin'
◇資料庫級別的角色
資料庫級別角色用於幫助管理資料庫中的許可權。資料庫級角色的許可權作用域為資料庫范圍。可以將[資料庫]用戶名(User Name)添加到資料庫角色。
SQLServer中有兩種類型的資料庫級角色:資料庫中預定義的「固定資料庫角色」和您可以創建的「靈活資料庫角色」(自定義資料庫角色)。
固定資料庫角色是在資料庫級別定義的,並且存在於每個資料庫中。 db_owner和db_securityadmin資料庫角色的成員可以管理固定資料庫角色成員身份。但是,只有db_owner資料庫角色的成員能夠向db_owner固定資料庫角色中添加成員。 msdb資料庫中還有一些特殊用途的固定資料庫角色。
符合許可權要求的用戶,可以向資料庫級角色中添加資料庫帳戶和其他 SQL Server角色。固定資料庫角色的每個成員都可向同一個角色添加其他登錄名。
固定資料庫角色簡介:
1)db_owner:資料庫所有者,這個資料庫角色的成員可執行資料庫的所有管理操作。
2)db_accessadmin:資料庫訪問許可權管理者,角色成員具有添加、刪除資料庫使用者、資料庫角色和組的許可權。
3)db_securityadmin:資料庫安全管理員,角色成員可管理資料庫中的許可權,如設置資料庫表的增加、刪除、修改和查詢等存取許可權。
4)db_ddladmin:資料庫DDL管理員,角色成員可增加、修改或刪除資料庫中的對象。
5)db_backupoperator:資料庫備份操作員,角色成員具有執行資料庫備份的許可權。
6)db_datareader:資料庫數據讀取者,角色成員可以從所有用戶表中讀取數據。
7)db_datawriter:資料庫數據寫入者,角色成員具有對所有用戶表進行增加、刪除、修改的許可權。
8)db_denydatareader:資料庫拒絕數據讀取者,角色成員不能讀取資料庫中任何錶的內容。
9)db_denydatawriter:資料庫拒絕數據寫入者,角色成員不能對任何錶進行增加、刪修、修改操作。
10)public:是一個特殊的資料庫角色,每個資料庫用戶都是public角色的成員,因此不能將用戶、組或角色指派為public角色的成員,也不能刪除public角色的成員。public資料庫角色默認的許可權很少[使用某些系統過程查看並顯示master資料庫中的信息;執行一些不需要一些許可權的語句(例如PRINT)]。
可以利用系統函數IS_MEMBER檢查當前用戶是否是資料庫角色或Windows域組的成員。
可以利用系統存儲過程sp_helprolemember顯示資料庫角色的成員。
可以利用系統存儲過程sp_helpuser報告有關當前資料庫中資料庫級主體的信息。
可以利用系統存儲過程sp_helprotect報告當前資料庫中某對象的用戶許可權或語句許可權的信息。
--查詢用戶擁有的資料庫角色
useyourdb
execsp_helpuser 'UserName'
go
--查詢用戶被賦予的許可權
useyourdb
execsp_helprotect @username = 'user name'
⑨ sqlserver 創建資料庫的許可權是哪個
舉個例子:
通過加入資料庫角色,賦予資料庫用戶「dba」許可權:
--通過加入資料庫角色,賦予資料庫用戶「db_owner」許可權
exec sp_addrolemember 'db_owner', 'dba'此時,dba
就可以全權管理資料庫中的對象了。