资源描述:
《数据控制语言 DCL》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、三、DCL—数据控制语言1、权限与角色在SQLSERVER中,权限可分为系统权限和对象权限。系统权限由数据库管理员授予其他用户,是指数据库用户能够对数据库系统进行某种特定的操作的权力。创建一个基本表(CREATETABLE)对象权限由创建基本表、视图等数据库对象的用户授予其他用户,是指数据库用户在指定的数据库对象上进行某种特定的操作的权力。如查询(SELECT)、插入(INSERT)、修改(UPDATE)和删除(DELETE)等操作。角色是多种权限的集合,可以把角色授予用户或其他角色。当要为某一用户同时授予或收回多项权限时,则可以把这些权限定义为一个角色,对此角色进行操作。
2、这样就避免了许多重复性的工作,简化了管理数据库用户权限的工作。 2、系统权限与角色的授予SQL语言使用GRANT语句为用户授予系统权限,其语法格式为:GRANT<系统权限>
3、<角色>[,<系统权限>
4、<角色>]…TO<用户名>
5、<角色>
6、PUBLIC[,<用户名>
7、<角色>]…[WITHADMINOPTION]其语义为:将指定的系统权限授予指定的用户或角色。其中:PULBIC代表数据库中的全部用户。WITHADMINOPTION为可选项,指定后则允许被授权的用户将指定的系统特权或角色再授予其他用户或角色。例1:为用户张三授予CREATETABLE的系统权限。GRANTCRE
8、ATETABLETO张三 3、系统权限与角色的收回数据库管理员可以使用REVOKE语句收回系统权限,其语法格式为:REVOKE<系统权限>
9、<角色>[,<系统权限>
10、<角色>]…FROM<用户名>
11、<角色>
12、PUBLIC[,<用户名>
13、<角色>]…例2:收回用户张三所拥有的CREATETABLE的系统权限。REVOKECREATETABLEFROM张三 4、对象权限与角色的授予SQL语言使用GRANT语句为用户授予对象权限,其语法格式为:GRANTALL
14、<对象权限>[(列名[,列名]…)][,<对象权限>]…ON<对象名>TO<用户名>
15、<角色>
16、PUBLIC[,<用户名
17、>
18、<角色>]…[WITHGRANTOPTION]其语义为:将指定的操作对象的对象权限授予指定的用户或角色。其中:ALL代表所有的对象权限。列名用于指定要授权的数据库对象的一列或多列。如果不指定列名,被授权的用户将在数据库对象的所有列上均拥有指定的特权。实际上,只有当授予INSERT、UPDATE权限时才需指定列名。ON子句用于指定要授予对象权限的数据库对象名,可以是基本表名、视图名等。WITHADMINOPTION为可选项,指定后则允许被授权的用户将权限再授予其他用户或角色。例3:将对Sc表和student表的所有对象权限授予USER1和USER2。GRANTALLONS
19、c,studentTOUSER1,USER2 例4:将对Course表的查询权限授予所有用户。GRANTSELECTONCourseTOPUBLIC 例5:将查询student表和修改学生年龄的权限授予USER3,并允许将此权限授予其他用户。GRANTSELECT,UPDATE(PROF)ONstudentTTOUSER3WITHADMINOPTIONUSER3具有此对象权限,并可使用GRANT命令给其他用户授权,如下例,USER3将此权限授予USER4:GRANTSELECT,UPDATE(年龄)ONstudentTOUSER4 5、对象权限与角色的回收所有授予出去的权力
20、在必要时都可以由数据库管理员和授权者收回,收回对象权限仍然使用REVOKE语句,其语法格式为:REVOKE<对象权限>
21、<角色>[,<对象权限>
22、<角色>]…FROM<用户名>
23、<角色>
24、PUBLIC[,<用户名>
25、<角色>]…例6:收回用户USER1对Course表的查询权限。REVOKESELECTONCFROMUSER1 1、说明:复制表(只复制结构,源表名:a新表名:b)(Access可用)法一:select*intobfromawhere1<>1法二:selecttop0*intobfroma2、说明:拷贝表(拷贝数据,源表名:a目标表名:b)(Access可用)
26、insertintob(a,b,c)selectd,e,ffromb;3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径)(Access可用)insertintob(a,b,c)selectd,e,ffrombin‘具体数据库’where条件例子:..frombin'"&Server.MapPath(".")&"/data.mdb"&"'where..4、说明:两张关联表,删除主表中已经在副表中没有的信息 deletefromtable1wherenotexists(select*fromtable2where