概述 对数据库系统而言,保证数据的安全性永远都是最重要的问题之一。一个好的数据库环境,必须明确每个用户的职责,并分配其对应的权限。同时出现问题了也可以找到根源。
你是否会有这样的需求:
- 给某个用户查询所有数据库的权限
- 给某个用户只有备份数据库的权限
- 给一个用户只有指定数据库的权限
- 给一个用户只有某个表的权限
- 给一个用户只有查看某些对象(例如:视图)的权限
- 给一个用户只有执行一些存储过程的权限
目录
- 元素
- 权限分配
- 新建登入名
- 给用户分配数据库查看权限
- 给用户查询某个对象的权限
- 授予用户架构的权限
- 查询权限
- 回收权限
- 总结
元素文章可能会有些枯燥,还望耐心,相信应该有你想要的。
登入名只有拥有了登入名才能访问实例(sql server). 角色角色是一类权限的组合。 - 数据库角色的拥有者可以是用户也可以是数据库角色本身,管理员可以创建数据库角色,也可以勉强将数据库角色理解为一组相同权限的用户,为什么这么说呢,因为数据库角色和数据库用户不允许存在同名。
注意:不要将用户创建的数据库角色添加到固定的服务器数据库角色当中去,否则将导致固定的数据库角色的权限升级。 - 服务器角色的拥有者只有登入名,服务器角色是固定的,用户无法创建服务器角色。
注意:一般不建议给用户直接分配服务器角色,因为服务器角色是全局的,也就是说你拥有了服务器级别的权限,一般建议给用户分配数据库,然后给对应的数据库分配数据库角色权限。 用户 用户是数据库级的概念,数据库用户必须绑定具体的登入名,你也可以在新建登入名的时候绑定此登入名拥有的数据库,当你绑定登入名数据库后,数据库默认就创建了此登入名同名的数据库用户,登入名与数据库用户之间就存在关联关系,数据库用户是架构和数据库角色的拥有者,即你可以将某个架构分配给用户那么该用户就拥有了该架构所包含的对象,你也可以将某个数据库角色分配给用户,此用户就拥有该数据库角色的权限。 架构 架构是对象的拥有者,架构本身无权限,架构包含数据库对象:如表、视图、存储过程和函数等,平时最常见的默认架构dbo.,如果没指定架构默认创建数据库对象都是以dbo.开头,架构的拥有者是数据库用户、数据库角色、应用程序角色。用户创建的架构和角色只能作用于当前库。
理解了这些概念之后接下来就可以实践了,接下来我们测试的都是服务器角色选择public,只测试对数据库权限的控制。
权限分配新建登入名新建一个登入名person,只给登入名服务器角色分配public权限,不分配数据库 接下来用person登入实例,person用户无法访问任何数据库,由于我们未给用户分配任何数据库。 给用户分配数据库查看权限只允许用户查看AdventureWorks2008R2数据库 此时用户可以查询所有对象,但无法修改对象。 给用户查询某个对象的权限 如果觉得给用户查看权限太大了,将da_datareader数据库角色权限回收,你会发现用户可以访问数据库,但是看不到任何对象。
只给用户查看Person.Address表 USE AdventureWorks2008R2;GRANT SELECT ON OBJECT::Person.Address TO person;--或者使用USE AdventureWorks2008R2;GRANT SELECT ON Person.Address TO RosaQdM;GO
扩展功能 --以下都是赋予用户对表的dml权限[url=]
[/url]
---授予用户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[url=][/url]
[url=][/url]
标量函数权限:EXECUTE、REFERENCES。
表值函数权限:DELETE、INSERT、REFERENCES、SELECT、UPDATE。
存储过程权限:EXECUTE。
表权限:DELETE、INSERT、REFERENCES、SELECT、UPDATE。
视图权限:DELETE、INSERT、REFERENCES、SELECT、UPDATE。
[url=][/url]
授予用户架构的权限新建数据库角色db_persons 新增架构 数据库-安全性-架构 架构包含数据库对象 创建架构persons表 ---创建架构persons的表CREATE TABLE Persons.sutdent(id int not null)
你会发现用户同时有了Persons.sutdent表的查看权限,因为用户是数据库角色db_person的所有者,而db_person又是架构persons的所有者。 创建一些persons架构的视图,存储过程 [url=][/url]
---创建视图USE AdventureWorks2008R2GOCREATE VIEW Persons.vwsutdentASSELECT * FROM Persons.sutdentGOUSE AdventureWorks2008R2GO---创建存储过程CREATE PROCEDURE Persons.SP_sutdent(@OPTION NVARCHAR(50))ASBEGIN SET NOCOUNT ON IF @OPTION='Select' BEGIN SELECT * FROM Persons.sutdent ENDEND [url=][/url]
详细的GRANT功能可以查询2008r2连接丛书:
【必读】版权免责声明
1、本主题所有言论和内容纯属会员个人意见,与本论坛立场无关。2、本站对所发内容真实性、客观性、可用性不做任何保证也不负任何责任,网友之间仅出于学习目的进行交流。3、对提供的数字内容不拥有任何权利,其版权归原著者拥有。请勿将该数字内容进行商业交易、转载等行为,该内容只为学习所提供,使用后发生的一切问题与本站无关。 4、本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。 5、本网站所有软件和资料均为网友推荐收集整理而来,仅供学习用途使用,请务必下载后两小时内删除,禁止商用。6、如有侵犯你版权的,请及时联系我们(电子邮箱1370723259@qq.com)指出,本站将立即改正。
|