Ⅰ 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資料庫用戶許可權
設置SQL資料庫用戶許可權的方法如下: 點擊進入資料庫級別的「安全性」、「登錄名」、「新建登錄名」;在「常規」選項卡中,創建登陸名,並設置默認的資料庫;在「用戶映射」選項卡中,勾選需要設置的資料庫,並設置「架構」,點擊「確認」按鈕,完成創建用戶的操作;在「許可權」選項卡中,依次點擊「添加」、「瀏覽」、「選擇對象」;點擊「確認」按鈕後即可。
Ⅲ 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 server2005安全管理之用戶、角色、架構 與 許可權
2008-12-04 16:47
--打開資料庫
Use databaseName
--創建角色
create role ProgramerRole
--用於創建表 存儲過程 視圖
grant create table,create procere,create view to ProgramerRole
--execute用以執行存儲過程,alter用以創建、修改存儲過程和視圖,
--並可以新建立表,但不能修改表,但也可以刪除表和對表改名了
grant select,insert,execute,alter on schema::dbo to ProgramerRole
--用於允許用戶查看 顯示估計的執行計劃(081205)
grant showplan to ProgramerRole
--創建登錄賬號
--create login username with password='password'
--創建資料庫用戶
create user username for login username
--將用戶TestUser添加到TestRole角色中
exec sp_addrolemember 'ProgramerRole','username '
--執行Sql Server Profiler是伺服器級許可權,所以在master庫中授權
USE master;grant alter trace to auto;
註:據庫引擎優化顧問必須由具有系統管理員許可權的用戶進行初始化。在具有系統管理員許可權的用戶對資料庫引擎優化顧問進行初始化之後,任何是 db_owner 固定資料庫角色成員的用戶,都可以使用資料庫引擎優化顧問來優化他們擁有的資料庫上的表。
詳優化物理資料庫設計http://msdn.microsoft.com/zh-cn/library/ms191531(SQL.90).aspx
參考資料:
用戶架構分離:http://msdn.microsoft.com/zh-cn/library/ms190387(SQL.90).aspx
資料庫架構是一個獨立於資料庫用戶的非重復命名空間。您可以將架構視為對象的容器
主體:http://msdn.microsoft.com/zh-cn/library/ms181127(SQL.90).aspx
是可以請求 SQL Server 資源的實體
Windows 級別的主體
Windows 域登錄名
Windows 本地登錄名
SQL Server 級的主體
SQL Server 登錄名
資料庫級的主體
資料庫用戶
資料庫角色
應用程序角色
安全對象:http://msdn.microsoft.com/zh-cn/library/ms190401(SQL.90).aspx
安全對象是 SQL Server 資料庫引擎 授權系統控制對其進行訪問的資源
安全對象范圍有伺服器、資料庫和架構
安全對象范圍:伺服器包含以下安全對象:
端點
登錄帳戶
資料庫
安全對象范圍:資料庫包含以下安全對象:
用戶
角色
應用程序角色
程序集
消息類型
路由
服務
遠程服務綁定
全文目錄
證書
非對稱密鑰
對稱密鑰
約定
架構
安全對象范圍:架構包含以下安全對象:
類型
XML 架構集合
對象
對象 下面是對象類的成員:
聚合
約束
函數
過程
隊列
統計信息
同義詞
表
視圖
架構:http://msdn.microsoft.com/zh-cn/library/ms365789(SQL.90).aspx
架構是指包含表、視圖、過程等的容器。它位於資料庫內部,而資料庫位於伺服器內部
特定架構中的每個安全對象都必須有唯一的名稱。架構中安全對象的完全指定名稱包括此安全對象所在的架構的名稱。因此,架構也是命名空間
許可權:http://msdn.microsoft.com/zh-cn/library/ms190387(SQL.90).aspx
每個 SQL Server 2005 安全對象都有可以授予主體的關聯許可權
資料庫級別的角色:http://msdn.microsoft.com/zh-cn/library/ms189121(SQL.90).aspx
固定資料庫角色是在資料庫級別定義的,並且存在於每個資料庫中。db_owner 和 db_securityadmin 資料庫角色的成員可以管理固定資料庫角色成員身份;但是,只有 db_owner 資料庫的成員可以向 db_owner 固定資料庫角色中添加成員。
每個資料庫用戶都屬於 public 資料庫角色。當尚未對某個用戶授予或拒絕對安全對象的特定許可權時,則該用戶將繼承授予該安全對象的 public 角色的許可權
伺服器級別角色:http://msdn.microsoft.com/zh-cn/library/ms188659(SQL.90).aspx
固定伺服器角色在其作用域內屬於伺服器范圍。固定伺服器角色的每個成員都可以向其所屬角色添加其他登錄名。
GRANT 架構許可權:http://msdn.microsoft.com/zh-cn/library/ms187940(SQL.90).aspx
如何配置用戶以創建和管理 SQL Server 代理作業 http://msdn.microsoft.com/zh-cn/library/ms187901.aspx
若要配置用戶以創建或執行 Microsoft SQL Server 代理作業,必須先將某個現有 SQL Server 登錄名或 msdb 角色添加到 msdb 資料庫中的下列 SQL Server 代理固定資料庫角色之一:SQLAgentUserRole、SQLAgentReaderRole 或 SQLAgentOperatorRole。
默認情況下,這些資料庫角色的成員可以創建各自的作業步驟,這些作業步驟不執行其他作業步驟。如果這些非管理用戶要運行那些執行其他作業步驟類型(例如,SSIS 包)的作業,它們需要對代理帳戶具有訪問許可權。sysadmin 固定伺服器角色的所有成員都有創建、修改和刪除代理帳戶的許可權
為具體的用戶設置具體的訪問許可權 收藏
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 [用戶名]
Ⅳ sqlserver用sql怎麼分配許可權
1、為角色賦予jobs表的所有許可權
GRANT ALL ON jobs TO newrole
2、為角色賦予sales表的查、改許可權
GRANT SELECT,UPDATE ON sales TO newrole
臨時表可以被任何用戶在任何資料庫下創建,而不需要授予任何許可權。
本地臨時表只能被創建它的會話訪問。全局臨時表可以被所有會話訪問和修改,而不需要授權。
Ⅵ SQL 怎麼寫授予用戶對自定義架構的查詢,添加許可權
給自定義控制項添加「自定義欄位」_a(使用屬性訪問器,public屬性名A),然後將控制項內的image對象的src屬性綁定給欄位_a(就是賦值),在引用該自定義控制項的地方,直接控制項名.A=XX賦值就能完成控制項內部image對象屬性值的更改了。 還是偽代碼清楚點: 屬性訪問器,寫在自定義控制項里 public string A { set { _a= value; } get { return _a; } } protected string _a= String.Empty; 自定義控制項的構造函數或者 Page_Load方法里 做下綁定: image對象.Src=_a; 用到該自定義控制項的地方: this.控制項對象.A="image/1.jpg"; 就行了。
Ⅶ 用SQL語句怎麼設置許可權
SQL是Structured Quevy Language(結構化查詢語言)的縮寫。SQL是專為資料庫而建立的操作命令集,是一種功能齊全的資料庫語言。在使用它時,只需要發出「做什麼」的命令,「怎麼做」是不用使用者考慮的。SQL功能強大、簡單易學、使用方便,已經成為了資料庫操作的基礎,並且現在幾乎所有的資料庫均支持SQL。
##1 二、SQL資料庫數據體系結構
SQL資料庫的數據體系結構基本上是三級結構,但使用術語與傳統關系模型術語不同。在SQL中,關系模式(模式)稱為「基本表」(base table);存儲模式(內模式)稱為「存儲文件」(stored file);子模式(外模式)稱為「視圖」(view);元組稱為「行」(row);屬性稱為「列」(column)。名稱對稱如^00100009a^:
##1 三、SQL語言的組成
在正式學習SQL語言之前,首先讓我們對SQL語言有一個基本認識,介紹一下SQL語言的組成:
1.一個SQL資料庫是表(Table)的集合,它由一個或多個SQL模式定義。
2.一個SQL表由行集構成,一行是列的序列(集合),每列與行對應一個數據項。
3.一個表或者是一個基本表或者是一個視圖。基本表是實際存儲在資料庫的表,而視圖是由若干基本表或其他視圖構成的表的定義。
4.一個基本表可以跨一個或多個存儲文件,一個存儲文件也可存放一個或多個基本表。每個存儲文件與外部存儲上一個物理文件對應。
5.用戶可以用SQL語句對視圖和基本表進行查詢等操作。在用戶角度來看,視圖和基本表是一樣的,沒有區別,都是關系(表格)。
6.SQL用戶可以是應用程序,也可以是終端用戶。SQL語句可嵌入在宿主語言的程序中使用,宿主語言有FORTRAN,COBOL,PASCAL,PL/I,C和Ada語言等。SQL用戶也能作為獨立的用戶介面,供交互環境下的終端用戶使用。
##1 四、對資料庫進行操作
SQL包括了所有對資料庫的操作,主要是由4個部分組成:
1.數據定義:這一部分又稱為「SQL DDL」,定義資料庫的邏輯結構,包括定義資料庫、基本表、視圖和索引4部分。
2.數據操縱:這一部分又稱為「SQL DML」,其中包括數據查詢和數據更新兩大類操作,其中數據更新又包括插入、刪除和更新三種操作。
3.數據控制:對用戶訪問數據的控制有基本表和視圖的授權、完整性規則的描述,事務控制語句等。
4.嵌入式SQL語言的使用規定:規定SQL語句在宿主語言的程序中使用的規則。
下面我們將分別介紹:
##2 (一)數據定義
SQL數據定義功能包括定義資料庫、基本表、索引和視圖。
首先,讓我們了解一下SQL所提供的基本數據類型:(如^00100009b^)
1.資料庫的建立與刪除
(1)建立資料庫:資料庫是一個包括了多個基本表的數據集,其語句格式為:
CREATE DATABASE <資料庫名> 〔其它參數〕
其中,<資料庫名>在系統中必須是唯一的,不能重復,不然將導致數據存取失誤。〔其它參數〕因具體資料庫實現系統不同而異。
例:要建立項目管理資料庫(xmmanage),其語句應為:
CREATE DATABASE xmmanage
(2) 資料庫的刪除:將資料庫及其全部內容從系統中刪除。
其語句格式為:DROP DATABASE <資料庫名>
例:刪除項目管理資料庫(xmmanage),其語句應為:
DROP DATABASE xmmanage
2.基本表的定義及變更
本身獨立存在的表稱為基本表,在SQL語言中一個關系唯一對應一個基本表。基本表的定義指建立基本關系模式,而變更則是指對資料庫中已存在的基本表進行刪除與修改。
Ⅷ 怎麼設置SQL資料庫用戶許可權
--SQLServer:
一、操作步驟
首先進入資料庫級別的【安全性】-【登錄名】-【新建登錄名】
(圖11:其它對象類型)
Ⅸ 在MSSQL SERVER2005中,如何給用戶授予只有創建表、沒有刪除表及修改表結構的許可權
有創建表Create table許可權,隱含Alter。
樓主 的需求只能通過DB 觸發器控制
go--舉個例子
USE [master]
GO
CREATE LOGIN [Roy] WITH PASSWORD=N'1', DEFAULT_DATABASE=[Test], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE [Test]
GO
CREATE USER [Roy] FOR LOGIN [Roy]
GO
USE [Test]
GO
/****** 物件: Schema [Roy] 指令碼日期: 08/19/2011 09:46:15 ******/
CREATE SCHEMA [Roy] AUTHORIZATION [Roy]
go
use [Test]
GO
GRANT CREATE TABLE TO [Roy]
GO
CREATE TRIGGER tr_DBDropTable ON DATABASE
FOR DROP_TABLE,ALTER_TABLE
AS
IF ORIGINAL_LOGIN()='Roy'
BEGIN
PRINT '沒許可權執行 DROP TABLE'
ROLLBACK
end
GO
--以下測試,用登陸用戶Roy
go
CREATE TABLE Roy.Roy(ID int)
GO
SELECT SUSER_NAME(), USER_NAME();
DROP TABLE Roy.Roy
/*
沒許可權執行 DROP TABLE
訊息 3609,層級 16,狀態 2,行 2
交易在觸發程序中結束。已中止批次。
*/Ⅹ 在sql sever 中怎麼用語句給予用戶建表的許可權
1. 首先在 SQL Server 伺服器級別,創建登陸帳戶(create login)
--創建登陸帳戶(create login)
create login dba with password='abcd1234@', default_database=mydb
登陸帳戶名為:「dba」,登陸密碼:abcd1234@」,默認連接到的資料庫:「mydb」。 這時候,dba 帳戶就可以連接到 SQL Server 伺服器上了。但是此時還不能 訪問資料庫中的對象(嚴格的說,此時 dba 帳戶默認是 guest 資料庫用戶身份, 可以訪問 guest 能夠訪問的資料庫對象)。
要使 dba 帳戶能夠在 mydb 資料庫中訪問自己需要的對象, 需要在資料庫 mydb 中建立一個「資料庫用戶」,賦予這個「資料庫用戶」 某些訪問許可權,並且把登陸帳戶「dba」 和這個「資料庫用戶」 映射起來。 習慣上,「資料庫用戶」 的名字和 「登陸帳戶」的名字相同,即:「dba」。 創建「資料庫用戶」和建立映射關系只需要一步即可完成:
2. 創建資料庫用戶(create user):
--為登陸賬戶創建資料庫用戶(create user),在mydb資料庫中的security中的user下可以找到新創建的dba
create user dba for login dba with default_schema=dbo
並指定資料庫用戶「dba」 的默認 schema 是「dbo」。這意味著 用戶「dba」 在執行「select * from t」,實際上執行的是 「select * from dbo.t」。
3. 通過加入資料庫角色,賦予資料庫用戶「dba」許可權:
--通過加入資料庫角色,賦予資料庫用戶「db_owner」許可權
exec sp_addrolemember 'db_owner', 'dba'
此時,dba 就可以全權管理資料庫 mydb 中的對象了。
如果想讓 SQL Server 登陸帳戶「dba」訪問多個資料庫,比如 mydb2。 可以讓 sa 執行下面的語句:
--讓 SQL Server 登陸帳戶「dba」訪問多個資料庫
use mydb2
go
create user dba for login dba with default_schema=dbo
go
exec sp_addrolemember 'db_owner', 'dba'
go
此時,dba 就可以有兩個資料庫 mydb, mydb2 的管理許可權了!