SQLServer更改用戶定義的數據庫角色
更改用戶定義的數據庫角色註意事項
需具有以下一項或多項權限或成員身份才能運行此命令:
- 對角色具有 ALTER 權限
- 對數據庫具有 ALTER ANY ROLE 權限
- 具有 db_securityadmin 固定數據庫角色的成員身份
此外,若要更改固定數據庫角色中的成員身份還需要:
- 具有 db_owner 固定數據庫角色的成員身份
不能更改固定數據庫角色的名稱。
使用SSMS數據庫管理工具更改用戶定義的數據庫角色
1、連接數據庫-》選擇數據庫-》展開安全性-》展開角色-》展開數據庫角色-》選擇要修改的數據庫角色-》右鍵點擊-》選擇屬性。
2、在數據庫角色屬性彈出框-》點擊常規-》修改角色所有者-》修改角色擁有的架構(
3、在數據庫角色屬性彈出框-》點擊安全對象-》修改數據庫角色名稱-》修改數據庫角色安全對象-》修改數據庫角色安全對象權限(當使用角色執行數據庫操作、對象和資源時,通過安全對象和權限設置來定義和解決這個問題)。
4、在數據庫角色屬性彈出框-》點擊擴展屬性-》修改數據庫角色註釋(對角色進行註釋解說)-》點擊確定,修改完成。
使用T-SQL腳本更改用戶定義的數據庫角色
語法
--聲明數據庫引用 use database_name; go --修改數據庫中創建新的數據庫角色名稱 alter role role_name with name=new_role_name; go --修改此角色擁有的架構 --添加時執行下列語法 use database_name go alter authorization on schema::架構名稱 to role_name; go --刪除或者時把架構擁有者改為架構本身即,註意不要刪除架構 use database_name go alter authorization on schema::架構名稱 to 架構名稱; go ----此角色的成員 --添加成員 use database_name go alter role role_name add member database_principal; go ----刪除成員 use database_name go alter role role_name drop member database_principal; go ----此角色的安全對象 ----授予權限 use database_name go ----授予備份日誌的權限 grant 權限名稱 to role_name; go ----授予並允許轉授備份日誌的權限 grant 權限名稱 to role_name with grant option; go ----回收授予並允許轉轉授備份數據庫的權限 revoke grant option for 權限名稱 to role_name cascade as 所有者; go ----拒絕不安全的程序集 deny 權限名稱 to role_name cascade; go --修改此角色註釋 use database_name go exec sys.sp_updateextendedproperty @name=擴展屬性名稱, @value=擴展屬性值 , @level0type=N‘user‘,@level0name=role_name ; go
語法註釋
--database_name
--數據庫名稱
--role_name
--適用範圍:SQL Server(從 2008 版開始)和 Azure SQL Database
--指定要更改的數據庫角色。
--with name=new_role_name
--適用範圍:SQL Server(從 2008 版開始)和 Azure SQL Database
--指定更改用戶定義的數據庫角色的名稱。 數據庫中必須尚未包含新名稱。
--更改數據庫角色的名稱不會更改角色的 ID 號、所有者或權限。
--add member database_principal
--適用範圍:SQL Server(從 2012 版開始)和Azure SQL Database
--指定向數據庫角色的成員身份添加數據庫主體。
--database_principal 是數據庫用戶或用戶定義的數據庫角色。
--database_principal 不能是固定的數據庫角色或是服務器主體。
--drop member database_principal
--適用範圍:SQL Server(從 2012 版開始)和Azure SQL Database
--指定從數據庫角色的成員身份刪除數據庫主體。
--database_principal 是數據庫用戶或用戶定義的數據庫角色。
--database_principal 不能是固定的數據庫角色或是服務器主體。
示例
--修改此角色擁有的架構
--添加時執行下列語法
--use [testss]
--go
--alter authorization on schema::[db_accessadmin] to testrole;
--go
--刪除或者時把架構擁有者改為架構本身即,註意不要刪除架構
use [testss]
go
alter authorization on schema::[db_accessadmin] to [db_accessadmin]
go
/**********
語法
添加角色成員
alter role role_name add member database_principal
--add member database_principal
--適用範圍:SQL Server(從 2012 版開始)和Azure SQL Database
--指定向數據庫角色的成員身份添加數據庫主體。
--database_principal 是數據庫用戶或用戶定義的數據庫角色。
--database_principal 不能是固定的數據庫角色或是服務器主體。
刪除角色成員
alter role role_name drop member database_principal
--drop member database_principal
--適用範圍:SQL Server(從 2012 版開始)和Azure SQL Database
--指定從數據庫角色的成員身份刪除數據庫主體。
--database_principal 是數據庫用戶或用戶定義的數據庫角色。
--database_principal 不能是固定的數據庫角色或是服務器主體。
***********/
----此角色的成員
--添加成員
--use [testss]
--go
--alter role testrole add member [guest];
--go
----刪除成員
use [testss]
go
alter role [testrole] drop member [guest];
go
----此角色的安全對象
----授予權限
--use [testss]
--go
----授予備份日誌的權限
--grant backup log to [testrole];
--go
----授予並允許轉授備份日誌的權限
--grant backup log to [testrole] with grant option;
--go
----回收授予並允許轉轉授備份數據庫的權限
--revoke grant option for backup log to [testrole] cascade as [dbo];
--go
----拒絕不安全的程序集
--deny backup log to [testrole] cascade;
--go
--修改此角色註釋
use [testss]
go
exec sys.sp_updateextendedproperty @name=N‘roledescript‘, @value=N‘修改測試角色‘ , @level0type=N‘user‘,@level0name=N‘testrole‘;
go
/**********
語法
alter role role_name with name=new_name;
--role_name
--適用範圍:SQL Server(從 2008 版開始)和 Azure SQL Database
--指定要更改的數據庫角色。
--with name=new_name
--適用範圍:SQL Server(從 2008 版開始)和 Azure SQL Database
--指定更改用戶定義的數據庫角色的名稱。 數據庫中必須尚未包含新名稱。
--更改數據庫角色的名稱不會更改角色的 ID 號、所有者或權限。
**********/
--聲明數據庫引用
use [testss];
go
--修改數據庫中創建新的數據庫角色名稱
alter role testrole with name=alterrole;
go
示例結果:註意T-SQL腳本執行完成之後需要刷信查看執行結果!
SQLServer更改用戶定義的數據庫角色