USE AdventureWorks2008R2;
GRANT SELECT ON OBJECT::Person.Address TO person;
--或者使用
USE AdventureWorks2008R2;
GRANT SELECT ON Person.Address TO RosaQdM;
GO 扩展功能
--以下都是赋予用户对表的dml权限
---授予用户person对表Person.Address的修改权限
USE AdventureWorks2008R2;
GRANT UPDATE ON Person.Address TO person;
GO
---授予用户person对表Person.Address的插入权限
USE AdventureWorks2008R2;
GRANT INSERT ON Person.Address TO person;
GO
---授予用户person对表Person.Address的删除权限
USE AdventureWorks2008R2;
GRANT DELETE ON Person.Address TO person;
--授予用户存储过程dbo.prc_errorlog的执行权限
GRANT EXECUTE ON dbo.prc_errorlog TO person
---创建架构persons的表
CREATE TABLE Persons.sutdent
(id int not null)
你会发现用户同时有了Persons.sutdent表的查看权限,因为用户是数据库角色db_person的所有者,而db_person又是架构persons的所有者。
创建一些persons架构的视图,存储过程
---创建视图
USE AdventureWorks2008R2
GO
CREATE VIEW Persons.vwsutdent
AS
SELECT * FROM Persons.sutdent
GO
USE AdventureWorks2008R2
GO
---创建存储过程
CREATE PROCEDURE Persons.SP_sutdent
(@OPTION NVARCHAR(50))
AS
BEGIN
SET NOCOUNT ON
IF @OPTION='Select'
BEGIN
SELECT * FROM Persons.sutdent
END
END
---登入名表
select * from master.sys.syslogins
---登入名与服务器角色关联表
select * from sys.server_role_members
---服务器角色表
select * from sys.server_principals
----查询登入名拥有的服务器角色
select SrvRole = g.name, MemberName = u.name, MemberSID = u.sid
from sys.server_role_members m inner join sys.server_principals g on g.principal_id = m.role_principal_id
inner join sys.server_principals u on u.principal_id = m.member_principal_id
---数据库用户表
select * from sysusers
---数据库用户表角色关联表
select * from sysmembers
---数据库角色表
select * from sys.database_principals
----查询数据库用户拥有的角色
select ta.name as username,tc.name as databaserole from sysusers ta inner join sysmembers tb on ta.uid=tb.memberuid
inner join sys.database_principals tc on tb.groupuid=tc.principal_id
查询登入名与数据库用户之间的关系
--查询当前数据库用户关联的登入名
use AdventureWorks2008R2
select ta.name as loginname,tb.name as databaseusername from master.sys.syslogins ta inner join sysusers tb on ta.sid=tb.sid
/*如果将当前数据库还原到另一台服务器实例上,刚好那台服务器上也存在person登入用户,你会发现二者的sid不一样,
由于sid不一样,所以登入用户不具有当前数据库的访问权限,我们要想办法将二者关联起来。
*/
---关联登入名与数据库用户(将数据库用户的sid刷成登入名的sid)
use AdventureWorks2008R2
EXEC sp_change_users_login 'Update_One', 'person', 'person'
Go
USE AdventureWorks2008R2;
REVOKE EXECUTE ON dbo.prc_errorlog FROM person; 回收Person.Address表的查询,修改,删除权限
--回收修改
USE AdventureWorks2008R2;
REVOKE update ON Person.Address FROM person;
USE AdventureWorks2008R2;
REVOKE alter ON Person.Address FROM person;
--回收删除
USE AdventureWorks2008R2;
REVOKE delete ON Person.Address FROM person;
--回收查询
USE AdventureWorks2008R2;
REVOKE select ON Person.Address FROM person;
最后剩下owner为‘.’的是数据库级的权限 最后回收数据库的权限
USE AdventureWorks2008R2;
REVOKE CREATE TABLE FROM person;
GO
CONNECT权限是用户访问数据库的权限,将此权限回收后用户将无法访问数据库
--USE AdventureWorks2008R2;
--REVOKE CONNECT FROM person;
--GO
再执行exec sp_helprotect @username = 'person',就剩下action=connect的数据库访问权限
将权限回收后,数据库用户还剩下架构Persons的权限,如果还需要将该权限回收,只需要用户取消关联对应的db_person数据库角色权限。
详细的revoke权限回收请参考2008r2联机丛书:
ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_6tsql/html/9d31d3e7-0883-45cd-bf0e-f0361bbb0956.htm