下面呢是我在学习数据控制时遇到的问题和解决方法,可能也不是很对,希望看到我这篇文章的大佬能给我指点指点。
我为什么要写这篇文章呢?
(1)当做以后复习的资料;
(2)锻炼一下自己写文章的能力;
什么是数据控制?
【1】把授权的决定告知系统
【2】把授权结果存入数据字典
【3】当用户提出操作请求时,根据授权情况进行检查以决定是否执行操作请求
根据数据控制的定义我们便引入了GRANT(授权)语句和REVOKE(回收)语句
首先来看GRANT语句:
GRANT语句的一般格式:
GRANT <权限>[,<权限>]...
[ON <对象类型> <对象名>]
TO <用户>[,<用户>]...
[WITH GRANT OPTION];
语义:将对指定操作对象的指定操作权限授予指定的用户
我们常见的权限包括:INSERT、CREATE、UPDATE、DELETE、ALTER、SELECT
对象类型:表,视图,用户;
WITH GRANT OPTION:使获得某种权限的用户不仅可以使用,还可以进行传播;
说明:
发出GRANT:
DBA
数据库对象创建者(即属主Owner)
拥有该权限的用户
按受权限的用户 :
一个或多个具体用户
PUBLIC(全体用户)
例如:把查询Student表的所有权限授予用户U1;
GRANT SELECT
ON TABLE Student
TO U1;
接下来看看REVOKE的用法:
授予的权限可以由DBA或其他授权者用REVOKE语句收回
REVOKE语句的一般格式为:
REVOKE <权限>[,<权限>]...
[ON <对象类型> <对象名>]//注意此处有没有根据情况而定,例如如果收回创建表的权限该局就不存在了;
FROM <用户>[,<用户>]...;
例如:把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4;
小结:
DBA:拥有所有对象的所有权限
不同的权限授予不同的用户
用户:拥有自己建立的对象的全部的操作权限(这个地方在我做实验的时候就出错了,以后再详细说)
GRANT:授予其他用户
被授权的用户
“继续授权”许可:再授予(WITH GRANT OPTION)
所有授予出去的权力在必要时又都可用REVOKE语句收回
以上呢都是关于数据控制的基本知识
下面我来说一说实验过程中遇到的问题:
【1】在使用SQL Server2012界面工具创建登录名的时候,虽然创建成功了,但是由于我在创建过程中可能对一些选项不是很理解,误选了,导致我在接下来的操作过程中处处栽坑。
(1)在我没有给用户设置任何权限的时候,便可以进行SELECT一些操作。话不多说,一顿百度,跌跌撞撞就对了。
在用界面工具创建了一个用户后,选用了db_datareader(数据库角色成员身份),db_datareader有查询所有对象的权限:表,视图,存储过程,函数等,
数据库角色:指一组固定的用某些权限的数据库角色;//职位,集成式的管理方式(老师说就像班长一样,具有某些管理班级的权利)
所以要想使你创建的用户不具有任何权限,这个选项就不要选了啊。
下面是我百度搜刮到的知识:
数据库角色:
public
–public 角色是一个特殊的数据库角色,每个数据库用户都属于它。public 角色:
–捕获数据库中用户的所有默认权限。
–无法将用户、组或角色指派给它,因为默认情况下它们即属于该角色。
–含在每个数据库中,包括 master、msdb、tempdb、model 和所有用户数据库。
–无法除去。
db_owner
–进行所有数据库角色的活动,以及数据库中的其它维护和配置活动。
–该角色的权限跨越所有其它固定数据库角色。
db_accessadmin
–在数据库中添加或删除 Windows NT 4.0 或 Windows 2000 组和用户以及 SQL Server 用户。
db_datareader
–查看来自数据库中所有用户表的全部数据。
db_datawriter
–添加、更改或删除来自数据库中所有用户表的数据
db_ddladmin
–添加、修改或除去数据库中的对象(运行所有 DDL)
db_securityadmin
–管理 SQL Server 2000 数据库角色的角色和成员,并管理数据库中的语句和对象权限
db_backupoperator
–有备份数据库的权限
db_denydatareader
–拒绝选择数据库数据的权限
db_denydatawriter
–拒绝更改数据库数据的权限
(2)第二个遇到的问题就是架构了,这个是因为我在给一个用户创建表和视图的权限以后,便在该用户的登录下,创建表和视图时,报错。
错误原因:默认dbo.架构不存在或该用户不存在操作权限(大致意思是这样,具体提示我给忘了);
一开始遇到这种操作时,我就先百度了一下,有种方法便是创建新的架构
例如:
第二种就是选择db_owner
db_owner
–进行所有数据库角色的活动,以及数据库中的其它维护和配置活动。
–该角色的权限跨越所有其它固定数据库角色。
例如:在要操作的数据库中,左击安全性,找到用户xsuser1,选择拥有的架构,选择db_owner;(这个是听实验课上的同学说的,不过这个有利有弊吧,虽然可以建表了,但还会带来一些其他权限,这个地方我并不是很明白,希望能看到我这篇文章的大佬,帮忙支招)
第三种办法:
使用sql语句:
所在架构的alter权限:
语句如:grant alter on schema :: dbo to xsuser1
这个意思大概就是将修改dbo下数据库对象的权限赋给xsuser1吧(我只会用,并不知道为什么会这样)
再来说说什么是架构?
百度查到的:架构是对象的拥有者,架构本身无权限,架构包含数据库对象:如表、视图、存储过程和函数等,平时最常见的默认架构dbo.,如果没指定架构默认创建数据库对象都是以dbo.开头,架构的拥有者是数据库用户,数据库角色、应用程序角色。用户创建的架构和角色只作用于当前库;(尤其是最后一句要记得哦)
通过查阅资料发现数据库中的架构说的含糊不清,只能靠自己的理解了。
我理解的架构就是一个杂货架,里面可以放不同种类的东西,不过放的东西种类还是有范围的。
补充知识:
服务器登录名:指有权限登录到某服务器的用户;
服务器角色:指一组固定的服务器用户,默认有9组;
登录名一定属于某些角色,默认为PUBLIC;
服务器角色不允许更改;
登录后也不一定有权限操作数据库;
数据库用户:指有权限能操作数据库的用户;
数据库角色:指一组固定的用某些权限的数据库角色;//职位,集成式的管理方式
数据库架构:指数据库对象的容器;
数据库用户对应于服务器登录名一遍登录者可以操作数据库;
数据库角色可以添加,可以定制不同的权限;
数据库架构,类似于数据库对象的命名空间,用户通过架构访问数据库对象;
角色
角色是一类权限的组合;数据库角色的拥有者可以是用户也可以是数据库角色本身,管理员可以创建数据库角色,也可以勉强将数据库理解为一组相同权限的用户,为什么这么说呢?因为数据库角色和数据库用户不允许存在同名;
一般在windows和sa下创建用户;
选中对应的授权数据库,再开始授权;
CREATE table只能在MASTER下去做
使用sp_addlogin创建新的登录名时还要映射到相应的数据库;
系统管理员才可以创建新用户,而新用户没有那么大的权限;
最后再来个比较简单的思维导图:
总结:我知道我还有很多不足、遗漏的知识点和可能理解错的地方,不过我会在接下来的学习过程中继续补充和改正的,也希望大家可以多多指正。