sql默認架構
❶ 什麼是架構,sql中的架構有哪些
架構(Schema)是一組資料庫對象的集合,它被單個負責人(可以是用戶或角色)所擁有並構成唯一命名空間。你可以將架構看成是對象的容器。
在 SQL Server 2000 中,用戶(User)和架構是隱含關聯的,即每個用戶擁有與其同名的架構。因此要刪除一個用戶,必須先刪除或修改這個用戶所擁有的所有資料庫對象。
在 SQL Server 2005 中,架構和創建它的資料庫用戶不再關聯,完全限定名(fully-qualified name)現在包含4個部分:server.database.schema.object
1. 體系結構(Architecture)
體系結構亦可稱為架構,所謂軟體架構,根據Perry 和Wolfe之定義:Software Architecture = {Elements,Forms, Rationale / Constraint },也就是軟體主架構 = {組件元素,元素互助合作之模式,基礎要求與限制}。Philippe Kruchten採用上面的定義,並說明主架構之設計就是:將各組件元素以某些理想的合作模式組織起來,以達成系統的基本功能和限制。體系結構又分為多種樣式,如Pipes and Filters等。
2. 框架(Framework)
框架亦可稱為應用架構,框架的一般定義就是:在特定領域基於體系結構的可重用的設計。也可以認為框架是體系結構在特定領域下的應用。框架比較出名的例子就是MVC。
3. 庫(Library)
庫應該是可重用的、相互協作的資源的集合,供開發人員進行重復調用。它與框架的主要區別在於運行時與程序的調用關系。庫是被程序調用,而框架則調用程序。比較好的庫有JDK。
4. 設計模式(Design Pattern)
設計模式大家應該很熟悉,尤其四人幫所寫的書更是家喻戶曉。「四人幫」將模式描述為「在一定的環境中解決某一問題的方案」。這三個事物 — 問題、解決方案和環境 — 是模式的基本要素。給模式一個名稱,考慮使用模式將產生的結果和提供一個或多個示例,對於說明模式也都是有用的。
5. 平台(PlatForm)
由多種系統構成,其中也可以包含硬體部分。
對於以上的概念有一個比較清楚的認識之後,就可以在軟體的開發過程中進行應用。理論和實踐是缺一不可的,相輔相成的。沒有理論的指導,實踐就缺乏基礎;沒有實踐的證明,理論就缺乏依據,因此我一直認為:對於當代的程序員,在有一定的實踐基礎後,必須學習更深的理論知識。無論你是從那方面先開始學習的。
在軟體的開發過程中,從許多過程實踐和方法中,大致可以提煉出五大步驟:需求、分析、設計、編碼、測試。而體系結構是軟體的骨架,是最重要的基礎。體系結構是涉及到每一步驟中。一般在獲取需要的同時,就應該開始分析軟體的體系結構。體系結構現在一般是各個大的功能模塊組合成,然後描述各個部分的關系。
我一般認為框架是體系結構中每個模塊中更細小的結構。如需要表示web技術,就會用到MVC框架,而web功能只是整個軟體體系中的一個功能模塊。每個框架可以有許多個實例,如用java實現的MVC框架structs。
而在框架之下就是設計模式,設計模式一般是應用中框架之中的,也可以說是對框架的補充。因為框架只是提供了一個環境,需要我們我裡面填入更多的東西。無論是否應用了設計模式,你都可以實現軟體的功能,而正確應用了設計模式,是我們對前人軟體的設計或實現方法的一種繼承,從而讓你的軟體更軟。
體系結構是可以從不同視角來進行分析的,所以軟體體系結構的設計可以按照不同的視角來進行的。按4+1 views的論述,那是四種views:邏輯、開發、過程、物理和場景。因此體系結構是逐漸細化的,你不可能開始就拿出一個完美的體系結構,而只能根據開發過程逐漸對體系結構進行細化。
打個比方:如果我們准備建一個房子,那房子如果按功能來分:牆壁、地板、照明等,它是按那種樣式來組成的,房子是四方的還是圓形的等,這樣就組成了房子的體系結構。在體系結構之下,我們可以把框架應用在每個模塊中,例如牆壁,我們准備應用什麼框架。牆壁可以包括:窗戶、門等。窗戶和門的組成的就是一種框架。而窗戶是什麼形狀的或者是大還是小,是要為了實現屋內的亮度的,因此挑選什麼樣的窗戶就是設計模式。
❷ sql server 2005 添加架構 需要什麼許可權
架構的作用與示例
用戶與架構(schema)分開,讓資料庫內各對象不再綁在某個用戶賬號上,可以解決SQL SERVER 2000及以前版本中「用戶離開公司"問題,也就是在擁有該對象的用戶離開公司,或離開該職務時,不必要大費周章地更改該用戶所有的對象屬於新的用戶所有。另外,也可讓 DBA 在安裝某個套裝軟體時,設置該套裝軟體所用的資料庫對象都屬於某個特定的架構,容易區別。也就是說,在單一資料庫內,不同部門或目的的對象,可以通過架構區分不同的對象命名原則與許可權。
在 SQL Server 2005 /2008中,架構獨立於創建它們的資料庫用戶而存在。可以在不更改架構名稱的情況下轉讓架構的所有權。並且可以在架構中創建具有用戶友好名稱的對象,明確指示對象的功能。例如,除了 cus.app.entry.customEntry 外,您還可以創建名為 cus.app.manifest.customEntry 的架構。因為「manifest」不是用戶,所以從資料庫中刪除用戶後,無需更改此名稱。這就簡化了資料庫管理員和開發人員的工作。
SQL Server 2005/2008 還引入了「默認架構」的概念,用於解析未使用其完全限定名稱引用的對象的名稱。在 SQL Server 2000 中,首先檢查的是調用資料庫用戶所擁有的架構,然後是 DBO 擁有的架構。在 SQL Server 2005 /2008中,每個用戶都有一個默認架構,用於指定伺服器在解析對象的名稱時將要搜索的第一個架構。可以使用 CREATE USER 和 ALTER USER 的 DEFAULT_SCHEMA 選項設置和更改默認架構。如果未定義 DEFAULT_SCHEMA,則資料庫用戶將把 DBO 作為其默認架構。
下面的顯示SQL Server許可權層次結構的圖可能會給我們一個直觀的認識:
SQL Server 2005/2008 Database Engine 管理著可以通過許可權進行保護的實體的分層集合。這些實體稱為「安全對象」。在安全對象中,最突出的是伺服器和資料庫,但可以在更細的級別上設置離散許可權。SQL Server 通過驗證主體是否已獲得適當的許可權來控制主體對安全對象執行的操作。
安全對象關系如下圖:
下面舉個具體的示例來說明以一下架構的作用。
--命令對架構進行操作
use master
go
setuser
go
--創建測試資料庫
create database schTest
go
create login df with password='sj1234',default_database=schTest
create login xhl with password='sj1245',default_database=schTest
go
use schTest
go
-- 創建兩個用戶時沒有指定屬於哪個架構
create user df for login df
create user xhl for login xhl
-- 這個表沒指定屬於哪個架構屬於默認DBO 架構
go
create table tb1 (姓名 varchar(8),性別 char(2))
go
--這個表就屬於sch架構
create schema sch
go
create table sch.tb2(姓名 varchar(8),性別 char(2),年齡 int)
go
-- 賦予schTest這個用戶查詢sche架構中的對象的許可權.
grant select on schema::sch to df
go
setuser 'df' --切換用戶df
select * from tb2
-- 此時報告"對象名無效" 是因為沒有指定tb2的架構,系統默認為dbo,而我們的tb2屬於sch架構.
--帶上架構名稱,就可以查詢了
go
select * from sch.tb2
go
setuser -- 切換到sa
---切換到xhl
setuser 'xhl'
--不能查詢,是因為沒有許可權
select * from sch.tb2
go
setuser --切換sa
--給df用戶賦默認架構
alter user df with default_schema=sch
go
setuser 'df' --切換df
-- 此時不需要指定sch 也可以了,如果架構中還有其他對象,也可以查詢
select * from tb2
go
setuser --切換sa
--創建第三張測試表,同樣的是sch架構下
create table sch.tb3 (id int,uname varchar(8))
go
--切換用戶df
setuser 'df'
---可以進行查詢
select * from tb3
go
---但是無法進行數據插入,因為沒有插入許可權
insert into tb3 values (1,'abcde') --拒絕了insert許可權
go
setuser
--賦插入許可權
grant insert on schema::sch to df
--切換用戶df
setuser 'df'
go
---可以進行數據插入
insert into tb3 values (1,'abcde') --OK!
---查詢結果
select * from tb3
GO
Grant alter on schema::sch to df -- 使schTest 這個用戶對所有的架構都有可更改的能力。
--錯誤
--無法對sa、dbo、實體所有者、information_schema、sys 或您自己授予、拒絕或撤消許可權。
GO
Use master
go
Grant control server to df -- 使schTest這個用戶能夠控制伺服器。
--錯誤
--無法對sa、dbo、實體所有者、information_schema、sys 或您自己授予、拒絕或撤消許可權。
setuser
go
use schtest
go
--創建架構sch1
create schema sch1
go
-- 修改對象的架構tb2表的架構由sch 轉移到sch1
alter schema sch1 transfer sch.tb2
go
--創建一個新用戶,同時指定默認schema,默認屬於DBO
create login yhy with password='sj1234',default_database=master
GO
use schTest
GO
create user yhy for login yhy with default_schema=sch --屬於sch
--切換用戶yhy
setuser 'yhy'
--查詢表,對象名'tb2' 無效。
select * from tb2
go
setuser
--賦架構許可權
grant select on schema::sch1 to yhy
--切換用戶yhy
setuser 'yhy'
go
select * from tb2 ---還是無效,因為不在同一個schema
go
setuser
go
alter user yhy with default_schema=sch1 --更改yhy的默認架構
GO
--由於yhy不是當前用戶,所以無法進行查詢
select * from tb2
--顯示當前用戶
GO
select user
GO
--切換用戶yhy
setuser 'yhy'
-- 此時就可以進行查詢了,如果架構中還有其他對象,也可以查詢
go
select * from tb2
--顯示當前用戶
select user
go
--切換用戶
Setuser
--切換用戶為df
setuser 'df'
-- 此時由於tb2的架構由sch變為了sch1,所以df就不可以查詢tb2了
go
--查詢報錯
select * from tb2
--顯示當前用戶
select user
go
setuser
go
use master
go
---刪除用戶
drop user df
drop user xhl
drop user yhy
---刪除登錄名
drop login df
drop login yhy
drop login xhl
--刪除資料庫
drop database schTest
❸ sql server中的架構是什麼意思
在sqlserver 2005中,可能大家在工作或學習的時候會經常發現這樣一些問題,你使用一個賬戶在資料庫中創建了一張表,卻發現你自己創建的表卻沒有修改和查詢的許可權,這是一件很郁悶的事情,在sqlserver2000中卻不存在這樣的問題,那為什麼在2005中會出現這樣的事情,這樣的設置可以帶來哪些好處?其實導致這一問題的原因主要在於2005中多了一個新的概念—架構。
首先我們來看一下msdn中對架構的定義:架構(Schema)是形成單個命名空間的資料庫實體的集合。命名空間是一個集合,其中每個元素的名稱都是唯一的。在這里,我們可以將架構看成一個存放資料庫中對象的一個容器。
架構實際上在sqlserver2000中就已經存在,當我們使用查詢分析器去查詢一個表的時候,一個完整的表的名稱應該包括伺服器名.資料庫名.用戶名.對象名,而在sqlserver2005中一個表的完全限定名稱應該為伺服器名.資料庫名.架構名.對象名
在2000中,假如有一個賬戶tt在test資料庫中創建了一張表table1的時候,在伺服器上對查詢的語句應為select * from test.tt.table1,也就是說,在sqlserver 2000中一張表所屬的架構默認就是表的創建者的登錄名稱,用戶可以和修改他所創建的所有資料庫對象。但在2005中已經將用戶和其創建對象所屬架構的關聯取消了,而加入了一個全新的架構體系,這樣做的優點主要在於下面幾個方面:
1. 多個用戶可以通過角色(role)或組(Windows groups)成員關系擁有同一個架構。
2. 刪除資料庫用戶變得極為簡單。
3. 共享預設架構使得開發人員可以為特定的應用程序創建特定的架構來存放對象,這比僅使用管理員架構(DBO schema)要好。
4. 在架構和架構所包含的對象上設置許可權(permissions)比以前的版本擁有更高的可管理性。
5. 區分不同業務處理需要的對象,例如,我們可以把公共的表設置成pub的架構,把銷售相關的設置為sales,這樣管理和訪問起來更容易.
❹ sql server2005資料庫中使用架構
引用幫助文檔對架構的定義: 從 SQL Server 2005 開始,每個對象都屬於一個資料庫架構。資料庫架構是一個獨立於資料庫用戶的非重復命名空間。您可以將架構視為對象的容器。可以在資料庫中創建和更改架構,並且可以授予用戶訪問架構的許可權。任何用戶都可以擁有架構,並且架構所有權可以轉移。 在SQL Server 2000中架構和用戶是沒有多大的區別,我們在2000中一般是指所有者。2005後,用戶和架構開始明確的分開,架構可以理解為對象的容器或者命名空間。 對於架構特點的理解小節如下: 1.一個架構中不能包含相同名稱的對象,相同名稱的對象可以在不同的架構中存在。 2.一個架構只能有一個所有者,所有者可以是用戶, 資料庫角色, 應用程序角色。 3.一個用資料庫角色可以可以擁有一個默認架構,和多個架構。 4.多個資料庫用戶可以共享單個默認架構。 5.由於架構與用戶獨立,刪除用戶不會刪除架構中的對象。 6.SQL Server 2000 中對象引用是: [DatabaseServer].[DatabaseName].[ObjectOwner].[DatabaseObject] SQL Server 2005 中對象引用是: [DatabaseServer].[DatabaseName].[DatabaseSchema].[DatabaseObject]
❺ 與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'