SQLServer建立使用者自定義資料庫使用者
建立使用者自定義資料庫使用者注意事項
如果已忽略 FOR LOGIN,則新的資料庫使用者將被對映到同名的SQL Server登入名。
預設架構將是伺服器為此資料庫使用者解析物件名時將搜尋的第一個架構。 除非另外指定,否則預設架構將是此資料庫使用者建立的物件所屬的架構。
如果使用者具有預設架構,則將使用預設架構。 如果使用者不具有預設架構,但該使用者是具有預設架構的組的成員,則將使用該組的預設架構。 如果使用者不具有預設架構而且是多個組的成員,則該使用者的預設架構將是具有最低principle_id的Windows組的架構和一個顯式設定的預設架構。(不可能將可用的預設架構之一顯式選作首選架構。)如果不能為使用者確定預設架構,則將使用 dbo 架構。
DEFAULT_SCHEMA可在建立它所指向的架構前進行設定。
在建立對映到證書或非對稱金鑰的使用者時,不能指定DEFAULT_SCHEMA。
如果使用者是sysadmin固定伺服器角色的成員,則忽略DEFAULT_SCHEMA的值。sysadmin固定伺服器角色的所有成員都有預設架構dbo
。
WITHOUT LOGIN子句可建立不對映到SQL Server登入名的使用者。它可以作為guest連線到其他資料庫。可以將許可權分配給這一沒有登入名的使用者,當安全上下文更改為沒有登入名的使用者時,原始使用者將收到無登入名使用者的許可權。
只有對映到Windows主體的使用者才能包含反斜槓字元 (\)。
不能使用CREATE USER建立guest使用者,因為每個資料庫中均已存在guest使用者。可通過授予guest使用者CONNECT許可權來啟用該使用者,如下所示:
可以在 sys.database_principals 目錄檢視中檢視有關資料庫使用者的資訊。
使用SSMS資料庫管理工具建立使用者自定義資料庫使用者
1、連線伺服器-》在物件資源管理器視窗選擇資料庫-》展開資料庫-》展開安全性-》展開使用者-》右鍵點選使用者-》選擇新建。
2、在資料庫使用者-新建彈出框-》點選常規-》選擇使用者型別-》輸入使用者名稱-》選擇登入名-》選擇使用者所屬架構。
3、在資料庫使用者-新建彈出框-》選擇使用者所擁有的架構。
4、在資料庫使用者-新建彈出框-》點選成員身份-》選擇資料庫成員身份。
5、在資料庫使用者-新建彈出框-》點選搜尋選擇一個安全物件-》選擇安全物件以後選擇安全物件所擁有的許可權。
6、在資料庫使用者-新建彈出框-》選擇擴充套件屬性-》輸入註釋名稱-》輸入註釋值-》點選確定。
7、不需要重新整理即可在物件資源管理器檢視建立結果。
使用T-SQL指令碼建立使用者自定義資料庫使用者
語法
----建立使用者自定義資料庫使用者
----宣告資料庫引用
--use database_name;
--go
----windows使用者
--create user user_name for login login_name with default_schema=architecture_name,allow_encrypted_value_modifications={ on | off };
----不帶登入名的SQL使用者
--create user user_name without login with default_schema=architecrure_name,allow_encrypted_value_modifications={ on | off };
----帶登入名的SQL使用者
--create user user_name for login login_name with default_schema=architecture_name,allow_encrypted_value_modifications={ on | off };
----對映到非對稱金鑰的使用者
--create user user_name for asymmetric key asym_key_name;
----對映到證書的使用者
--create user user_name for certificate certificate_name;
--擁有的架構
--use database_name;
--go
--alter authorization on schema::[db_accessadmin] to user_name;
--go
--alter authorization on schema::[db_backupoperator] to user_name;
--go
--alter authorization on schema::[db_datareader] to user_name;
--go
--alter authorization on schema::[db_datawriter] to user_name;
--go
--alter authorization on schema::[db_ddladmin] to user_name;
--go
--alter authorization on schema::[db_denydatareader] to user_name;
--go
--alter authorization on schema::[db_denydatawriter] to user_name;
--go
--alter authorization on schema::[db_owner] to user_name;
--go
--alter authorization on schema::[db_securityadmin] to user_name;
--go
--alter authorization on schema::[guest] to user_name;
--go
--成員身份
--use database_name;
--go
--alter role [db_accessadmin] add member user_name;
--go
--alter role [db_backupoperator] add member user_name;
--go
--alter role [db_datareader] add member user_name;
--go
--alter role [db_datawriter] add member user_name;
--go
--alter role [db_ddladmin] add member user_name;
--go
--alter role [db_denydatareader] add member user_name;
--go
--alter role [db_denydatawriter] add member user_name;
--go
--alter role [db_owner] add member user_name;
--go
--alter role [db_securityadmin] add member user_name;
--go
----安全物件
----use database_name;
----go
----授予許可權
----備份日誌
--grant backup log to user_name;
--go
----備份資料庫
--grant backup database to user_name;
--go
----插入
--grant insert to user_name;
--go
----檢視定義
--grant view definition to user_name;
--go
----檢視任意列加密金鑰定義
--grant view any column encryption key definition to user_name;
--go
----檢視任意列主金鑰定義
--grant view any column master key definition to user_name;
--go
----檢視資料庫狀態
--grant view database state to user_name;
--go
----撤銷掩碼
--grant unmask to user_name;
--go
----建立xml架構集合
--grant create xml schema collection to user_name;
--go
----建立表
--grant create table to user_name;
--go
----建立程式集
--grant create assembly to user_name;
--go
----建立佇列
--GRANT CREATE QUEUE to user_name;
--go
----建立對稱金鑰
--grant create symmetric key to user_name;
--go
----建立非對稱金鑰
--grant create asymmetric key to user_name;
--go
----建立服務
--grant create service to user_name;
--go
----建立規則
--grant create rule to user_name;
--go
----建立過程
--grant create procedure to user_name;
--go
----建立函式
--grant create function to user_name;
--go
----建立架構
--grant create schema to user_name;
--go
----建立角色
--grant create role to user_name;
--go
----建立型別
--grant create type to user_name;
--go
----建立路由
--grant create route to user_name;
--go
----建立預設值
--grant create default to user_name;
--go
----建立全文目錄
--grant create fulltext catalog to user_name;
--go
----建立檢視
--grant create view to user_name;
--go
----建立資料庫DDL事件通知
--grant create database dll event notification to user_name;
--go
----建立同義詞
--grant create synonym to user_name;
--go
----建立訊息型別
--grant create message type to user_name;
--go
----建立遠端服務繫結
--grant create remote service binding to user_name;
--go
----建立約定
--grant create contract to user_name;
--go
----建立證書
--grant create certificate to user_name;
--go
----訂閱查詢通知
--grant subscribe query notifications to user_name;
--go
----更改
--grant alter to user_name;
--go
----更改任何外部資料來源
--grant alter any external data source to user_name;
--go
----更改任何外部檔案格式
--grant alter any external file format to user_name;
--go
----更改任何掩碼
--grant alter any mask to user_name;
--go
----更改任意安全策略
--grant alter any security policy to user_name;
--go
----更改任意程式集
--grant alter any assembly to user_name;
--go
----更改任意對稱金鑰
--grant alter any symmetric key to user_name;
--go
----更改任意非對稱金鑰
--grant alter any asymmetric key to user_name;
--go
----更改任意服務
--grant alter any service to user_name;
--go
----更改任意架構
--grant alter any schema to user_name;
--go
----更改任意角色
--grant alter any role to user_name;
--go
----更改任意路由
--grant alter any route to user_name;
--go
----更改任意全文目錄
--grant alter any fulltext catalog to user_name;
--go
----更改任意資料空間
--grant alter any dataspace to user_name;
--go
----更改任意資料庫DDL資料庫觸發器
--grant alter any database ddl trigger to user_name;
--go
----更改任意資料庫稽核
--grant alter any database audit to user_name;
--go
----更改任意資料庫事件通知
--grant alter any database event notification to user_name;
--go
----更改任意訊息型別
--grant alter any message type to user_name;
--go
----更改任意應用程式角色
--grant alter any application role to user_name;
--go
----更改任意使用者
--grant alter any user to user_name;
--go
----更改任意遠端服務繫結
--grant alter any remote service binding to user_name;
--go
----更改任意約定
--grant alter any contract to user_name;
--go
----更改任意證書
--grant alter any certificate to user_name;
--go
----更新
--grant update to user_name;
--go
----檢查點
--grant checkpoint to user_name;
--go
----接管所有權
--grant take ownership to user_name;
--go
----控制
--grant control to user_name;
--go
----控制聚合
--grant create aggregate to user_name;
--go
----連線
--grant connect to user_name;
--go
----連線複製
--grant connect replication to user_name;
--go
----刪除
--grant delete to user_name;
--go
----身份驗證
--grant authenticate to user_name;
--go
----顯示計劃
--grant showplan to user_name;
--go
----選擇
--grant select to user_name;
--go
----引用
--grant references to user_name;
--go
----執行
--grant execute to user_name;
--go
----授予並允許轉售許可權
----安全物件
----use database_name;
----go
----備份日誌
--grant backup log to user_name with grant option;
--go
----備份資料庫
--grant backup database to user_name with grant option;
--go
----插入
--grant insert to user_name with grant option;
--go
----檢視定義
--grant view definition to user_name with grant option;
--go
----檢視任意列加密金鑰定義
--grant view any column encryption key definition to user_name with grant option;
--go
----檢視任意列主金鑰定義
--grant view any column master key definition to user_name with grant option;
--go
----檢視資料庫狀態
--grant view database state to user_name with grant option;
--go
----撤銷掩碼
--grant unmask to user_name with grant option;
--go
----建立xml架構集合
--grant create xml schema collection to user_name with grant option;
--go
----建立表
--grant create table to user_name with grant option;
--go
----建立程式集
--grant create assembly to user_name with grant option;
--go
----建立佇列
--GRANT CREATE QUEUE to user_name with grant option;
--go
----建立對稱金鑰
--grant create symmetric key to user_name with grant option;
--go
----建立非對稱金鑰
--grant create asymmetric key to user_name with grant option;
--go
----建立服務
--grant create service to user_name with grant option;
--go
----建立規則
--grant create rule to user_name with grant option;
--go
----建立過程
--grant create procedure to user_name with grant option;
--go
----建立函式
--grant create function to user_name with grant option;
--go
----建立架構
--grant create schema to user_name with grant option;
--go
----建立角色
--grant create role to user_name with grant option;
--go
----建立型別
--grant create type to user_name with grant option;
--go
----建立路由
--grant create route to user_name with grant option;
--go
----建立預設值
--grant create default to user_name with grant option;
--go
----建立全文目錄
--grant create fulltext catalog to user_name with grant option;
--go
----建立檢視
--grant create view to user_name with grant option;
--go
----建立資料庫DDL事件通知
--grant create database dll event notification to user_name with grant option;
--go
----建立同義詞
--grant create synonym to user_name with grant option;
--go
----建立訊息型別
--grant create message type to user_name with grant option;
--go
----建立遠端服務繫結
--grant create remote service binding to user_name with grant option;
--go
----建立約定
--grant create contract to user_name with grant option;
--go
----建立證書
--grant create certificate to user_name with grant option;
--go
----訂閱查詢通知
--grant subscribe query notifications to user_name with grant option;
--go
----更改
--grant alter to user_name with grant option;
--go
----更改任何外部資料來源
--grant alter any external data source to user_name with grant option;
--go
----更改任何外部檔案格式
--grant alter any external file format to user_name with grant option;
--go
----更改任何掩碼
--grant alter any mask to user_name with grant option;
--go
----更改任意安全策略
--grant alter any security policy to user_name with grant option;
--go
----更改任意程式集
--grant alter any assembly to user_name with grant option;
--go
----更改任意對稱金鑰
--grant alter any symmetric key to user_name with grant option;
--go
----更改任意非對稱金鑰
--grant alter any asymmetric key to user_name with grant option;
--go
----更改任意服務
--grant alter any service to user_name;
--go
----更改任意架構
--grant alter any schema to user_name with grant option;
--go
----更改任意角色
--grant alter any role to user_name with grant option;
--go
----更改任意路由
--grant alter any route to user_name with grant option;
--go
----更改任意全文目錄
--grant alter any fulltext catalog to user_name with grant option;
--go
----更改任意資料空間
--grant alter any dataspace to user_name with grant option;
--go
----更改任意資料庫DDL資料庫觸發器
--grant alter any database ddl trigger to user_name with grant option;
--go
----更改任意資料庫稽核
--grant alter any database audit to user_name with grant option;
--go
----更改任意資料庫事件通知
--grant alter any database event notification to user_name with grant option;
--go
----更改任意訊息型別
--grant alter any message type to user_name with grant option;
--go
----更改任意應用程式角色
--grant alter any application role to user_name with grant option;
--go
----更改任意使用者
--grant alter any user to user_name with grant option;
--go
----更改任意遠端服務繫結
--grant alter any remote service binding to user_name with grant option;
--go
----更改任意約定
--grant alter any contract to user_name with grant option;
--go
----更改任意證書
--grant alter any certificate to user_name with grant option;
--go
----更新
--grant update to user_name with grant option;
--go
----檢查點
--grant checkpoint to user_name with grant option;
--go
----接管所有權
--grant take ownership to user_name with grant option;
--go
----控制
--grant control to user_name with grant option;
--go
----控制聚合
--grant create aggregate to user_name with grant option;
--go
----連線
--grant connect to user_name with grant option;
--go
----連線複製
--grant connect replication to user_name with grant option;
--go
----刪除
--grant delete to user_name with grant option;
--go
----身份驗證
--grant authenticate to user_name with grant option;
--go
----顯示計劃
--grant showplan to user_name with grant option;
--go
----選擇
--grant select to user_name with grant option;
--go
----引用
--grant references to user_name with grant option;
--go
----執行
--grant execute to user_name with grant option;
--go
----拒絕許可權
----安全物件
--use database_name;
--go
----備份日誌
--deny backup log to user_name;
--go
----備份資料庫
--deny backup database to user_name;
--go
----插入
--deny insert to user_name;
--go
----檢視定義
--deny view definition to user_name;
--go
----檢視任意列加密金鑰定義
--deny view any column encryption key definition to user_name;
--go
----檢視任意列主金鑰定義
--deny view any column master key definition to user_name;
--go
----檢視資料庫狀態
--deny view database state to user_name;
--go
----撤銷掩碼
--deny unmask to user_name;
--go
----建立xml架構集合
--deny create xml schema collection to user_name;
--go
----建立表
--deny create table to user_name;
--go
----建立程式集
--deny create assembly to user_name;
--go
----建立佇列
--deny CREATE QUEUE to user_name;
--go
----建立對稱金鑰
--deny create symmetric key to user_name;
--go
----建立非對稱金鑰
--deny create asymmetric key to user_name;
--go
----建立服務
--deny create service to user_name;
--go
----建立規則
--deny create rule to user_name;
--go
----建立過程
--deny create procedure to user_name;
--go
----建立函式
--deny create function to user_name;
--go
----建立架構
--deny create schema to user_name;
--go
----建立角色
--deny create role to user_name;
--go
----建立型別
--deny create type to user_name;
--go
----建立路由
--deny create route to user_name;
--go
----建立預設值
--deny create default to user_name;
--go
----建立全文目錄
--deny create fulltext catalog to user_name;
--go
----建立檢視
--deny create view to user_name;
--go
----建立資料庫DDL事件通知
--deny create database dll event notification to user_name;
--go
----建立同義詞
--deny create synonym to user_name;
--go
----建立訊息型別
--deny create message type to user_name;
--go
----建立遠端服務繫結
--deny create remote service binding to user_name;
--go
----建立約定
--deny create contract to user_name;
--go
----建立證書
--deny create certificate to user_name;
--go
----訂閱查詢通知
--deny subscribe query notifications to user_name;
--go
----更改
--deny alter to user_name;
--go
----更改任何外部資料來源
--deny alter any external data source to user_name;
--go
----更改任何外部檔案格式
--deny alter any external file format to user_name;
--go
----更改任何掩碼
--deny alter any mask to user_name;
--go
----更改任意安全策略
--deny alter any security policy to user_name;
--go
----更改任意程式集
--deny alter any assembly to user_name;
--go
----更改任意對稱金鑰
--deny alter any symmetric key to user_name;
--go
----更改任意非對稱金鑰
--deny alter any asymmetric key to user_name;
--go
----更改任意服務
--deny alter any service to user_name;
--go
----更改任意架構
--deny alter any schema to user_name;
--go
----更改任意角色
--deny alter any role to user_name;
--go
----更改任意路由
--deny alter any route to user_name;
--go
----更改任意全文目錄
--deny alter any fulltext catalog to user_name;
--go
----更改任意資料空間
--deny alter any dataspace to user_name;
--go
----更改任意資料庫DDL資料庫觸發器
--deny alter any database ddl trigger to user_name;
--go
----更改任意資料庫稽核
--deny alter any database audit to user_name;
--go
----更改任意資料庫事件通知
--deny alter any database event notification to user_name;
--go
----更改任意訊息型別
--deny alter any message type to user_name;
--go
----更改任意應用程式角色
--deny alter any application role to user_name;
--go
----更改任意使用者
--deny alter any user to user_name;
--go
----更改任意遠端服務繫結
--deny alter any remote service binding to user_name;
--go
----更改任意約定
--deny alter any contract to user_name;
--go
----更改任意證書
--deny alter any certificate to user_name;
--go
----更新
--deny update to user_name;
--go
----檢查點
--deny checkpoint to user_name;
--go
----接管所有權
--deny take ownership to user_name;
--go
----控制
--deny control to user_name;
--go
----控制聚合
--deny create aggregate to user_name;
--go
----連線
--deny connect to user_name;
--go
----連線複製
--deny connect replication to user_name;
--go
----刪除
--deny delete to user_name;
--go
----身份驗證
--deny authenticate to user_name;
--go
----顯示計劃
--deny showplan to user_name;
--go
----選擇
--deny select to user_name;
--go
----引用
--deny references to user_name;
--go
----執行
--deny execute to user_name;
--go
----擴充套件屬性
----宣告資料庫引用
----use database_name
--go
----新增擴充套件註釋
--exec sys.sp_addextendedproperty @name=N'description_name', @value=N'description_value', @level0type=N'user',@level0name=N'user_name';
--go
語法註釋
--database_name
--資料庫名稱
--user_name
--指定在此資料庫中用於識別該使用者的名稱。user_name 為 sysname。
--它的長度最多是 128 個字元。在建立基於Windows主體的使用者時,除非指定其他使用者名稱,否則Windows主體名稱將成為使用者名稱。
--login_name
--指定要為其建立資料庫使用者的登入名。login_name必須是伺服器中的有效登入名。
--可以是基於Windows主體(使用者或組)的登入名,也可以是使用SQL Server身份驗證的登入名。
--當此SQL Server登入名進入資料庫時,它將獲取正在建立的這個資料庫使用者的名稱和ID。
--在建立從 Windows 主體對映的登入名時,請使用格式 [<domainName>\<loginName>]。
--如果CREATE USER語句是SQL批處理中唯一的語句,則Windows Azure SQL Databas 將支援WITH LOGIN子句。
--如果CREATE USER語句不是SQL批處理中唯一的語句或在動態SQL中執行,則不支援 WITH LOGIN 子句。
--with default_schema=architecture_name;
--指定伺服器為此資料庫使用者解析物件名時將搜尋的第一個架構。
--allow_encrypted_value_modifications={ on | off }
--適用範圍:SQL Server 2016 (13.x) 到SQL Server 2017、SQL Database。
--取消在大容量複製操作期間對伺服器進行加密元資料檢查。這使使用者能夠在表或資料庫之間大容量複製加密資料,
--而無需對資料進行解密。預設為 OFF。
--without login
--指定不應將使用者對映到現有登入名。
--asymmetric KEY asym_key_name
--適用範圍:SQL Server 2008到SQL Server 2017、SQL Database。
--指定要為其建立資料庫使用者的非對稱金鑰。
--certificate certificate_name
--適用範圍:SQL Server 2008到SQL Server 2017、SQL Database。
--指定要為其建立資料庫使用者的證書。
--description_name
--使用者自定義使用者註釋名稱。
--description_value
--使用者自定義使用者註釋值。
示例
/**********示例**********/
--宣告資料庫引用
use [testss];
go
--判斷使用者是否存在,如果存在則刪除,不存在則建立
if exists(select * from sys.database_principals where name='tests')
--把架構修改回來架構自身
alter authorization on schema::[db_accessadmin] to db_accessadmin;
--刪除角色擁有的成員
alter role [db_accessadmin] drop member tests;
--刪除使用者
drop user tests;
go
--建立當前資料庫使用者自定義使用者
create user tests
for login tests
with default_schema=dbo,allow_encrypted_value_modifications=on;
--擁有的架構
use testss;
go
alter authorization on schema::[db_accessadmin] to tests;
go
--成員身份
use testss;
go
alter role [db_accessadmin] add member tests;
go
--安全物件
use testss;
go
--授予許可權
--備份日誌
grant backup log to tests;
go
--擴充套件屬性
--宣告資料庫引用
--use database_name
go
--新增擴充套件註釋
exec sys.sp_addextendedproperty @name=N'tests_description', @value=N'使用者自定義使用者描述', @level0type=N'user',@level0name=N'tests';
go
示例結果