角色一直存在各個資料庫中,比如 SQL Server、Oracle 等,MySQL 自從版本 8.0 release,引入了角色這個概念。
角色的概念
角色就是一組針對各種資料庫許可權的集合。比如,把一個角色分配給一個用戶,那這個用戶就擁有了這個角色包含的所有許可權。一個角色可以分配給多個用戶,另外一個用戶也可以擁有多個角色,兩者是多對多的關系。不過 MySQL 角色目前還沒有提供類似於其他資料庫的系統預分配的角色。比如某些資料庫的 db_owner、 db_datareader 、 db_datawriter 等等。那接下來我分幾個方面,來示例說明角色的使用以及相關注意事項。
示例 1:一個完整角色的授予步驟
用管理員創建三個角色:db_owner, db_datareader, db_datawriter
mysql> create role db_owner,db_datareader,db_datawriter;
Query OK, 0 rows affected (0.02 sec)
mysql> grant all on ytt_new.* to db_owner;
Query OK, 0 rows affected (0.01 sec)
mysql> grant select on ytt_new.* to db_datareader;
Query OK, 0 rows affected (0.01 sec)
mysql> grant insert,delete,update on ytt_new.* to db_datawriter;
Query OK, 0 rows affected (0.01 sec)
- 創建三個普通用戶,分別為 ytt1、ytt2、ytt3。mysql> create user ytt1 identified by 'ytt',ytt2 identified by 'ytt',ytt3 identified by 'ytt';Query OK, 0 rows affected (0.01 sec)
- 分別授予這三個用戶對應的角色。
-- 授權角色
mysql> grant db_owner to ytt1;
Query OK, 0 rows affected (0.02 sec)
-- 激活角色
mysql> set default role db_owner to ytt1;
Query OK, 0 rows affected (0.00 sec)
mysql> grant db_datareader to ytt2;
Query OK, 0 rows affected (0.01 sec)
mysql> set default role db_datareader to ytt2;
Query OK, 0 rows affected (0.01 sec)
mysql> grant db_datawriter to ytt3;
Query OK, 0 rows affected (0.01 sec)
mysql> set default role db_datawriter to ytt3;
Query OK, 0 rows affected (0.01 sec)
- 以上是角色授予的一套完整步驟。那上面有點非常規的地方是激活角色這個步驟。MySQL 角色在創建之初默認是沒有激活的,也就是說創建角色,並且給一個用戶特定的角色,這個用戶其實並不能直接使用這個角色,除非激活了才可以。
-- 用管理員登錄並且創建用戶
mysql> create user ytt4 identified by 'ytt';
Query OK, 0 rows affected (0.00 sec)
-- 把之前的三個角色都分配給用戶ytt4.
mysql> grant db_owner,db_datareader,db_datawriter to ytt4;
Query OK, 0 rows affected (0.01 sec)
-- 激活用戶ytt4的所有角色.
mysql> set default role all to ytt4;
Query OK, 0 rows affected (0.02 sec)
-- ytt4 用戶登錄
root@ytt-pc:/var/lib/mysql# mysql -uytt4 -pytt -P3304 -hytt-pc
...
-- 查看當前角色列表
mysql> select current_role();
+--------------------------------------------------------+
| current_role() |
+--------------------------------------------------------+
| `db_datareader`@`%`,`db_datawriter`@`%`,`db_owner`@`%` |
+--------------------------------------------------------+
1 row in set (0.00 sec)
-- 簡單創建一張表並且插入記錄, 檢索記錄,完了刪掉這張表
mysql> use ytt_new
Database changed
mysql> create table t11(id int);
Query OK, 0 rows affected (0.05 sec)
mysql> insert into t11 values (1);
Query OK, 1 row affected (0.02 sec)
mysql> select * from t11;
+------+
| id |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
mysql> drop table t11;
Query OK, 0 rows affected (0.04 sec)
- 示例 3:用戶在當前 session 里角色互換
-- 還是之前的用戶ytt4, 切換到db_datareader
mysql> set role db_datareader;
Query OK, 0 rows affected (0.00 sec)
mysql> select current_role();
+---------------------+
| current_role() |
+---------------------+
| `db_datareader`@`%` |
+---------------------+
1 row in set (0.00 sec)
-- 切換後,沒有許可權創建表
mysql> create table t11(id int);
ERROR 1142 (42000): CREATE command denied to user 'ytt4'@'ytt-pc' for table 't11'
-- 切換到 db_owner,恢復所有許可權。
mysql> set role db_owner;
Query OK, 0 rows affected (0.00 sec)
mysql> create table t11(id int);
Query OK, 0 rows affected (0.04 sec)
- activate_all_roles_on_login:是否在連接 MySQL 服務時自動激活角色mandatory_roles:強制所有用戶默認角色
-- 用管理員連接MySQL,
-- 設置默認激活角色
mysql> set global activate_all_roles_on_login=on;
Query OK, 0 rows affected (0.00 sec)
-- 設置強制給所有用戶賦予角色db_datareader
mysql> set global mandatory_roles='db_datareader';
Query OK, 0 rows affected (0.00 sec)
-- 創建用戶ytt7.
mysql> create user ytt7;
Query OK, 0 rows affected (0.01 sec)
-- 用 ytt7登錄資料庫
root@ytt-pc:/var/lib/mysql# mysql -uytt7 -P3304 -hytt-pc
...
mysql> show grants;
+-------------------------------------------+
| Grants for ytt7@% |
+-------------------------------------------+
| GRANT USAGE ON *.* TO `ytt7`@`%` |
| GRANT SELECT ON `ytt_new`.* TO `ytt7`@`%` |
| GRANT `db_datareader`@`%` TO `ytt7`@`%` |
+-------------------------------------------+
3 rows in set (0.00 sec)
- 以下分別創建兩個用戶 ytt8、ytt9,一個給 create role,一個給 create user 許可權。
-- 管理員登錄,創建用戶ytt8,ytt9.
mysql> create user ytt8,ytt9;
Query OK, 0 rows affected (0.01 sec)
mysql> grant create role on *.* to ytt8;
Query OK, 0 rows affected (0.02 sec)
mysql> grant create user on *.* to ytt9;
Query OK, 0 rows affected (0.01 sec)
-- 用ytt8 登錄,
root@ytt-pc:/var/lib/mysql# mysql -uytt8 -P3304 -hytt-pc
...
mysql> create role db_test;
Query OK, 0 rows affected (0.02 sec)
-- 可以創建角色,但是不能創建用戶
mysql> create user ytt10;
ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation
mysql> q
Bye
-- 用ytt9 登錄
root@ytt-pc:/var/lib/mysql# mysql -uytt9 -P3304 -hytt-pc
...
-- 角色和用戶都能創建
mysql> create role db_test2;
Query OK, 0 rows affected (0.02 sec)
mysql> create user ytt10;
Query OK, 0 rows affected (0.01 sec)
mysql> q
Bye
- 那這里其實看到 create user 包含了 create role,create user 即可以創建用戶,也可以創建角色。
-- 用管理員登錄,創建用戶ytt11,ytt12.
mysql> create user ytt11,ytt12;
Query OK, 0 rows affected (0.01 sec)
mysql> grant select on ytt_new.* to ytt11;
Query OK, 0 rows affected (0.01 sec)
-- 把ytt11普通用戶的許可權授予給ytt12
mysql> grant ytt11 to ytt12;
Query OK, 0 rows affected (0.01 sec)
-- 來查看 ytt12的許可權,可以看到擁有了ytt11的許可權
mysql> show grants for ytt12;
+-----------------------------------+
| Grants for ytt12@% |
+-----------------------------------+
| GRANT USAGE ON *.* TO `ytt12`@`%` |
| GRANT `ytt11`@`%` TO `ytt12`@`%` |
+-----------------------------------+
2 rows in set (0.00 sec)
-- 在細化點,看看ytt12擁有哪些具體的許可權
mysql> show grants for ytt12 using ytt11;
+--------------------------------------------+
| Grants for ytt12@% |
+--------------------------------------------+
| GRANT USAGE ON *.* TO `ytt12`@`%` |
| GRANT SELECT ON `ytt_new`.* TO `ytt12`@`%` |
| GRANT `ytt11`@`%` TO `ytt12`@`%` |
+--------------------------------------------+
3 rows in set (0.00 sec)
- 角色撤銷和之前許可權撤銷類似。要麼 revoke,要麼刪除角色,那這個角色會從所有擁有它的用戶上移除。
-- 用管理員登錄,移除ytt2的角色
mysql> revoke db_datareader from ytt2;
Query OK, 0 rows affected (0.01 sec)
-- 刪除所有角色
mysql> drop role db_owner,db_datareader,db_datawriter;
Query OK, 0 rows affected (0.01 sec)
-- 對應的角色也從ytt1上移除掉了
mysql> show grants for ytt1;
+----------------------------------+
| Grants for ytt1@% |
+----------------------------------+
| GRANT USAGE ON *.* TO `ytt1`@`%` |
+----------------------------------+
1 row in set (0.00 sec)
示例 2:一個用戶可以擁有多個角色
其實意思是說,用戶連接到 MySQL 伺服器後,可以切換當前的角色列表,比如由 db_owner 切換到 db_datareader。
示例 4:關於角色的兩個參數
示例 5 :create role 和 create user 都有創建角色許可權,兩者有啥區別?
示例 6:MySQL 用戶也可以當角色來用
示例 7:角色的撤銷
至此,我分了 7 個目錄說明了角色在各個方面的使用以及注意事項,希望對大家有幫助。
『貳』 SQL資料庫的角色的定義,分類及角色的許可權分配操作
角色是一個強大的工具,使您得以將用戶集中到一個單元中,然後對該單元應用許可權。對一個角色授予、拒絕或廢除的許可權也適用於該角色的任何成員。可以建立一個角色來代表單位中一類工作人員所執行的工作,然後給這個角色授予適當的許可權。當工作人員開始工作時,只須將他們添加為該角色成員,當他們離開工作時,將他們從該角色中刪除。而不必在每個人接受或離開工作時,反復授予、拒絕和廢除其許可權。許可權在用戶成為角色成員時自動生效。
Microsoft® Windows NT® 和 Windows® 2000 組的使用方式與角色很相似。有關更多信息,請參見組。
如果根據工作職能定義了一系列角色,並給每個角色指派了適合這項工作的許可權,則很容易在資料庫中管理這些許可權。之後,不用管理各個用戶的許可權,而只須在角色之間移動用戶即可。如果工作職能發生改變,則只須更改一次角色的許可權,並使更改自動應用於角色的所有成員,操作比較容易。
在 Microsoft® SQL Server™ 2000 和 SQL Server 7.0 版中,用戶可屬於多個角色。
以下腳本說明登錄、用戶和角色的添加,並為角色授予許可權。
USE master
GO
sp_grantlogin 'NETDOMAIN\John'
GO
sp_defaultdb 'NETDOMAIN\John', 'courses'
GO
sp_grantlogin 'NETDOMAIN\Sarah'
GO
sp_defaultdb 'NETDOMAIN\Sarah', 'courses'
GO
sp_grantlogin 'NETDOMAIN\Betty'
GO
sp_defaultdb 'NETDOMAIN\Betty', 'courses'
GO
sp_grantlogin 'NETDOMAIN\Ralph'
GO
sp_defaultdb 'NETDOMAIN\Ralph', 'courses'
GO
sp_grantlogin 'NETDOMAIN\Diane'
GO
sp_defaultdb 'NETDOMAIN\Diane', 'courses'
GO
USE courses
GO
sp_grantdbaccess 'NETDOMAIN\John'
GO
sp_grantdbaccess 'NETDOMAIN\Sarah'
GO
sp_grantdbaccess 'NETDOMAIN\Betty'
GO
sp_grantdbaccess 'NETDOMAIN\Ralph'
GO
sp_grantdbaccess 'NETDOMAIN\Diane'
GO
sp_addrole 'Professor'
GO
sp_addrole 'Student'
GO
sp_addrolemember 'Professor', 'NETDOMAIN\John'
GO
sp_addrolemember 'Professor', 'NETDOMAIN\Sarah'
GO
sp_addrolemember 'Professor', 'NETDOMAIN\Diane'
GO
sp_addrolemember 'Student', 'NETDOMAIN\Betty'
GO
sp_addrolemember 'Student', 'NETDOMAIN\Ralph'
GO
sp_addrolemember 'Student', 'NETDOMAIN\Diane'
GO
GRANT SELECT ON StudentGradeView TO Student
GO
GRANT SELECT, UPDATE ON ProfessorGradeView TO Professor
GO
該腳本給 John 和 Sarah 教授提供了更新學生成績的許可權,而學生 Betty 和 Ralph 只能選擇他們自己的成績。Diane 因同時教兩個班,所以添加到兩個角色中。ProfessorGradeView 視圖應將教授限制在自己班學生的行上,而 StudentGradeView 應限制學生只能選擇自己的成績。
SQL Server 2000 和 SQL Server 7.0 版在安裝過程中定義幾個固定角色。可以在這些角色中添加用戶以獲得相關的管理許可權。下面是伺服器范圍內的角色。
固定伺服器角色
描述
sysadmin
可以在 SQL Server 中執行任何活動。
serveradmin
可以設置伺服器范圍的配置選項,關閉伺服器。
setupadmin
可以管理鏈接伺服器和啟動過程。
securityadmin
可以管理登錄和 CREATE DATABASE 許可權,還可以讀取錯誤日誌和更改密碼。
processadmin
可以管理在 SQL Server 中運行的進程。
dbcreator
可以創建、更改和除去資料庫。
diskadmin
可以管理磁碟文件。
bulkadmin
可以執行 BULK INSERT 語句。
可以從 sp_helpsrvrole 獲得固定伺服器角色的列表,可以從 sp_srvrolepermission 獲得每個角色的特定許可權。
每個資料庫都有一系列固定資料庫角色。雖然每個資料庫中都存在名稱相同的角色,但各個角色的作用域只是在特定的資料庫內。例如,如果 Database1 和 Database2 中都有叫 UserX 的用戶 ID,將 Database1 中的 UserX 添加到 Database1 的 db_owner 固定資料庫角色中,對 Database2 中的 UserX 是否是 Database2 的 db_owner 角色成員沒有任何影響。
固定資料庫角色
描述
db_owner
在資料庫中有全部許可權。
db_accessadmin
可以添加或刪除用戶 ID。
db_securityadmin
可以管理全部許可權、對象所有權、角色和角色成員資格。
db_ddladmin
可以發出 ALL DDL,但不能發出 GRANT、REVOKE 或 DENY 語句。
db_backupoperator
可以發出 DBCC、CHECKPOINT 和 BACKUP 語句。
db_datareader
可以選擇資料庫內任何用戶表中的所有數據。
db_datawriter
可以更改資料庫內任何用戶表中的所有數據。
db_denydatareader
不能選擇資料庫內任何用戶表中的任何數據。
db_denydatawriter
不能更改資料庫內任何用戶表中的任何數據。
可以從 sp_helpdbfixedrole 獲得固定資料庫角色的列表,可以從 sp_dbfixedrolepermission 獲得每個角色的特定許可權。
資料庫中的每個用戶都屬於 public 資料庫角色。如果想讓資料庫中的每個用戶都能有某個特定的許可權,則將該許可權指派給 public 角色。如果沒有給用戶專門授予對某個對象的許可權,他們就使用指派給 public 角色的許可權。
『叄』 在sql中怎麼為資料庫角色設置許可權呢
GRANT -- 定義訪問許可權
【語法】
GRANT { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER }
[,...] | ALL [ PRIVILEGES ] }
ON [ TABLE ] tablename [, ...]
TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
ON DATABASE dbname [, ...]
TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { EXECUTE | ALL [ PRIVILEGES ] }
ON FUNCTION funcname ([type, ...]) [, ...]
TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON LANGUAGE langname [, ...]
TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
ON SCHEMA schemaname [, ...]
TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { CREATE | ALL [ PRIVILEGES ] }
ON TABLESPACE tablespacename [, ...]
TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
【例子】
把表 films 的插入許可權賦予所有用戶:
GRANT INSERT ON films TO PUBLIC;
賦予用戶manuel對視圖kinds的所有許可權:
GRANT ALL PRIVILEGES ON kinds TO manuel;
請注意,如果上面的命令由超級用戶或者 kinds 的所有者執行,那麼它實際上會賦予所有許可權, 如果由其他人執行,那麼它會賦予這個「其他人」擁有授權選項的所有許可權。
收回授權 搜索 Revoke!
『肆』 sql語句server中怎麼查詢用戶的角色和許可權
SQL Server中查詢用戶的對象許可權和角色的方法
-- 查詢用戶的object許可權
exec sp_helprotect NULL, 'UserName'
-- 查詢用戶擁有的role
exec sp_helpuser 'UserName'
-- 查詢哪些用戶擁有指定的系統role
exec sp_helpsrvrolemember 'sysadmin'
-- 可查詢嵌套role
WITH tree_roles as
(
SELECT role_principal_id, member_principal_id
FROM sys.database_role_members
WHERE member_principal_id = USER_ID('UserName')
UNION ALL
SELECT c.role_principal_id,c.member_principal_id
FROM sys.database_role_members as c
inner join tree_roles
on tree_roles.member_principal_id = c.role_principal_id
)
SELECT distinct USER_NAME(role_principal_id) RoleName
FROM tree_roles
-- 其他許可權相關基本表
select * from sysusers
select * from syspermissions
-- Who has access to my SQL Server instance?
SELECT
name as UserName, type_desc as UserType, is_disabled as IsDisabled
FROM sys.server_principals
where type_desc in('WINDOWS_LOGIN', 'SQL_LOGIN')
order by UserType, name, IsDisabled
-- Who has access to my Databases?
SELECT
dp.name as UserName, dp.type_desc as UserType, sp.name as LoginName, sp.type_desc as LoginType
FROM sys.database_principals dp
JOIN sys.server_principals sp ON dp.principal_id = sp.principal_id
order by UserType
select * from sys.database_principals
-- Server Roles
select
p.name as UserName, p.type_desc as UserType, pp.name as ServerRoleName, pp.type_desc as ServerRoleType
from sys.server_role_members roles
join sys.server_principals p on roles.member_principal_id = p.principal_id
join sys.server_principals pp on roles.role_principal_id = pp.principal_id
where pp.name in('sysadmin')
order by ServerRoleName, UserName
-- Database Roles
SELECT
p.name as UserName, p.type_desc as UserType, pp.name as DBRoleName, pp.type_desc as DBRoleType, pp.is_fixed_role as IfFixedRole
FROM sys.database_role_members roles
JOIN sys.database_principals p ON roles.member_principal_id = p.principal_id
JOIN sys.database_principals pp ON roles.role_principal_id = pp.principal_id
where pp.name in('db_owner', 'db_datawriter')
-- What can these users do?
SELECT
grantor.name as GrantorName, dp.state_desc as StateDesc, dp.class_desc as ClassDesc, dp.permission_name as PermissionName ,
OBJECT_NAME(major_id) as ObjectName, GranteeName = grantee.name
FROM sys.database_permissions dp
JOIN sys.database_principals grantee on dp.grantee_principal_id = grantee.principal_id
JOIN sys.database_principals grantor on dp.grantor_principal_id = grantor.principal_id
where permission_name like '%UPDATE%'
『伍』 用SQL語句查詢當前用戶的所有許可權
工具/材料:Management Studio。
1、首先在桌面上,點擊「Management Studio」圖標。
『陸』 如何為SQL Server中創建的角色分配許可權
--創建一個簡單的登錄,登錄名為:newlogin;登錄密碼:123456;默認資料庫:master,默認資料庫也可以不指定。
EXEC sp_addlogin 'newlogin','123456','master'
--創建用戶
--創建一個簡單的用戶,如果不指定用戶名,則添加到當前資料庫登錄名中,如果不指定角色,則該用戶默認屬於public角色。下為添加newlogin登錄名。
EXEC sp_adser 'newlogin'
--創建一個帶用戶名的用戶,用戶可以與登錄名相同(同上一種類似),也可以不同,但要設定當前登錄名,用戶角色可選,默認為public。下為將用戶newuser添加到newlogin登錄名中。
EXEC sp_adser 'newlogin','newuser'
--創建角色
EXEC sp_addrole 'newrole'
--下為將用戶下為將用戶newuser添加到newlogin登錄名中。並指定newrole角色。
EXEC sp_adser 'newlogin','newuser','newrole'
--為角色newrole賦予jobs表的所有許可權
GRANT ALL ON jobs TO newrole
--為角色newrole賦予sales表的查、改許可權
GRANT SELECT,UPDATE ON sales TO newrole
--禁止角色newrole使用employees表的插入許可權
DENY INSERT ON employees TO newrole
另一種創建用戶和賦予角色的方式
--為登錄newlogin在資料庫中添加安全賬戶newuser
EXEC sp_grantdbaccess 'newlogin','newuser'
--添加newuser為角色newrole的成員
EXEC sp_addrolemember 'newrole','newuser'
--資料庫用戶、角色、登錄的刪除操作
--刪除當前資料庫用戶
EXEC sp_revokedbaccess 'newuser';
--刪除資料庫登錄
EXEC sp_droplogin 'newlogin'
--刪除資料庫角色
EXEC sp_droprole 'newrole'
--從資料庫角色(newrole)中刪除用戶(newuser)
EXEC sp_droprolemember 'newrole', 'newuser'
--用SQL代碼新建登錄、用戶
--創建帶密碼的mylogin登錄名,MUST_CHANGE 選項需要用戶首次連接伺服器時更改此密碼。
CREATE LOGIN mylogin WITH PASSWORD = '123456' MUST_CHANGE;
--創建映射到憑據的登錄名。
--以下示例將創建mylogin登錄名。此登錄名將映射到mycredential憑據。
CREATE LOGIN mylogin WITH PASSWORD = '123456',
CREDENTIAL = mycredential;
--從Windows 域帳戶創建登錄名
--如果從Windows 域帳戶映射登錄名,則登錄名必須用方括弧([ ]) 括起來。
CREATE LOGIN [jack\xiangzhao] FROM WINDOWS;
--如果指定用戶名,則不使用默認登錄名作為該資料庫用戶
CREATE USER myuser FOR LOGIN mylogin
--以下示例將創建用戶myuser擁有的資料庫角色myrole
CREATE ROLE myrole AUTHORIZATION myuser;
--以下示例將創建db_role固定資料庫角色擁有的資料庫角色myrole
CREATE ROLE myrole AUTHORIZATION db_role
『柒』 在SQL數據訪問中如何對不同級別設置訪問許可權
你把你設計的功能分成若干塊(抽象上)然後給不同的用戶賦予不同的訪問功能的許可權(比如做到用戶登錄那裡,檢測用戶可以訪問哪些頁面,就在菜單處顯示出來,不允許訪問的不顯示。並且在各個頁面load過程中檢測用戶是否越權訪問。)
『捌』 SQL sever中 什麼是許可權和角色,分別說出一下。
--什麼是角色?
例如,一個公司可能成立慈善活動委員會,其中包括來自不同部門,來自組織中各種不同級別的職員。這些職員需要訪問資料庫中特殊的項目表。沒有隻包括這些職員的現有 Windows NT 4.0 或 Windows 2000 組,而且沒有其它理由在 Windows NT 4.0 或 Windows 2000 中創建這樣一個組。可以為此項目創建一個自定義 SQL Server 資料庫角色 CharityEvent,並將個別的 Windows NT 和 Windows 2000 用戶添加到此資料庫角色。當應用許可權後,資料庫角色中的用戶便獲得對表的訪問許可權。其它資料庫活動的許可權不受影響,只有 CharityEvent 用戶可以使用該項目表。
SQL Server 角色存在於一個資料庫中,不能跨多個資料庫。
使用資料庫角色的好處包括:
1.對於任何用戶,都可以隨時讓多個資料庫角色處於活動狀態.如果所有用戶、組和角色都在當前資料庫中,則 SQL Server 角色可以包含 Windows NT 4.0 或 Windows 2000 組和用戶,以及 SQL Server用戶和其它角色。
2.在同一資料庫中,一個用戶可屬於多個角色。
3.提供了可伸縮模型以便在資料庫中設置正確的安全級別。
說明:資料庫角色要麼在創建角色時由明確指定為所有者的用戶所擁有,要麼在未指定所有者時為創建角色的用戶所擁有。角色的所有者決定可以在角色中添加或刪除誰。但是,因為角色不是資料庫對象,不能在同一資料庫中創建由不同用戶所擁有的多個同名角色。
許可權--
是指為了保證職責的有效履行,任職者必須具備的,對某事項進行決策的范圍和程度。它常常用「具有批准……事項的許可權」來進行表達。例如,具有批准預算外5000元以內的禮品費支出的許可權。
『玖』 sql server怎麼把一個角色的許可權給予基本表中的角色
1、為角色賦予jobs表的所有許可權
GRANT ALL ON jobs TO newrole
2、為角色賦予sales表的查、改許可權
GRANT SELECT,UPDATE ON sales TO newrole
臨時表可以被任何用戶在任何資料庫下創建,而不需要授予任何許可權。
本地臨時表只能被創建它的會話訪問。全局臨時表可以被所有會話訪問和修改,而不需要授權。
『拾』 sql 怎樣創建表許可權
--創建兩個測試表
CREATE TABLE tb1(id int,value int)
INSERT tb1 VALUES(1,10)
CREATE TABLE tb2(id int,value int)
INSERT tb1 VALUES(1,10)
GO
--創建登錄
CREATE LOGIN Liang WITH PASSWORD='myfend@hotmail.com';
--創建用戶
CREATE USER Liang FROM LOGIN Liang;
--授予用戶對tb1有UPDATE某個列的許可權,tb2隻有SELECT許可權
GRANT UPDATE(value) ON tb1 TO Liang
GRANT SELECT ON tb1 TO Liang
GRANT SELECT ON tb2 TO Liang
GO
--模擬用戶Liang對tb1表進行UPDATE
EXECUTE AS USER='Liang'
UPDATE tb1 SET
value=20
WHERE id=1
REVERT
SELECT * FROM tb1
/*
id value
----------- -----------
1 20
(1 行受影響)
*/
--模擬用戶Liang對tb2表進行UPDATE
EXECUTE AS USER='Liang'
UPDATE tb2 SET
value=20
WHERE id=1
REVERT
/*
消息 229,級別 14,狀態 5,第 23 行
拒絕了對對象 'tb2' (資料庫 'tempdb',架構 'dbo')的 UPDATE 許可權。
*/
GO
--刪除測試
DROP TABLE tb1,tb2
DROP USER Liang
DROP LOGIN Liang
--要控制對資料庫的許可權, 可以參考下面的:
-- 防止訪問他不該訪問的資料庫(總控制,明細還可以控制他對於某個資料庫的具體對象具有的許可權)
--切換到你新增的用戶要控制的資料庫
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 [用戶名]