SQL语句功能权限.docx
《SQL语句功能权限.docx》由会员分享,可在线阅读,更多相关《SQL语句功能权限.docx(14页珍藏版)》请在冰豆网上搜索。
SQL语句功能权限
插入多行数据的语法格式为:
insertintotable_or_view[(column_list)]子查询
例3-7求出各位学生的平均成绩,把结果存放在新表avgscore中。
程序清单如下:
/*首先建立新表avgscore,用来存放学号和学生的平均成绩。
*/
createtableavgscore
(snochar(10),
avgscoresmallint)
go
/*利用子查询求出sc表中各位学生的平均成绩,把结果存放在新表avgscore中。
*/insertintoavgscore
selectsno,avg(score)
fromsc
groupbysno
?
例3-12创建把讲授c5课程的教师的工资增加100元。
程序清单如下:
/*t表(教师基本情况表)的结构为t(tno,tn,sex,age,prof,sal,dept)分别表示教师的编号,姓名,性别,年龄,职称,工资,系别。
tc表(教师授课表)的结构为tc(tno,cno)分别表示教师的编号,课程编号。
*/
updatetsetsal=sal+100
wheretnoin
(selectt.tnofromt,tc
wheret.tno=tc.tnoando=c5)
/*通过连接查询找到讲授c5课程的教师编号。
*/
?
下面是删除一行记录的例子。
例3-14删除张益琳教师的记录。
程序清单如下:
deletefromtwheretn=’张益琳’
?
例3-16删除李明同学选课的记录。
deletefromscwheresno=
(selectsnofromswheresn=’李明’)
三、数据控制语言
?
数据控制语言(dcl)是用来设置或更改数据库用户或角色权限的语句,包括grant,
deny,revoke等语句。
在默认状态下,只有sysadmin,dbcreator,db_owner或
db_securityadmin等人员才有权力执行数据控制语言。
3.1语句权限与角色的授予
?
sql语言使用grant语句为用户授予语句权限的语法格式为:
grant<语句权限>|<角色>[,<语句权限>|<角色>+…
to<用户名>|<角色>|public[,<用户名>|<角色>+…
[withadminoption]
?
其语义为:
将指定的语句权限授予指定的用户或角色。
其中:
(1)pulbic代表数据库中的全部用户;
(2)withadminoption为可选项,指定后则允许被授权的用户将指定的系统特权或角色再授予其他用户或角色。
?
例3-17给用户mary和john以及windowsnt组corporate\bobj授予多个语
句权限。
程序清单如下:
grantcreatedatabase,createtable
tomary,john,[corporate\bobj]
?
例3-18为用户zhangyilin授予createtable的语句权限。
程序清单如下:
grantcreatetable
tozhangyilin
?
同语句权限的授予类似,sql语言使用grant语句为用户授予对象权限,其语法格
式为:
grantall|<对象权限>[(列名[,列名+…)+*,<对象权限>+…on<对象名>
to<用户名>|<角色>|public[,<用户名>|<角色>+…
[withadminoption]
?
其语义为:
将指定的操作对象的对象权限授予指定的用户或角色。
其中:
(1)all代表所有的对象权限。
(2)列名用于指定要授权的数据库对象的一列或多列。
如果不指定列名,被授权的用户将在数据库对象的所有列上均拥有指定的特权。
实际上,只有当授予insert、update权限时才需指定列名。
(3)on子句用于指定要授予对象权限的数据库对象名,可以是基本表名、视图名等。
(4)withadminoption为可选项,指定后则允许被授权的用户将权限再授予其他用户或角色。
?
例3-19在权限层次中授予对象权限。
首先,给所有用户授予select权限,然后,
将特定的权限授予用户mary,john和tom。
程序清单如下:
grantselect
ons
topublic
go
grantinsert,update,delete
ons
tomary,john,tom
go
?
例3-20将查询t表和修改教师职称的权限授予user3,并允许将此权限授予其他
用户。
程序清单如下:
grantselect,update(prof)
onttouser3
withadminoption
?
上例中,user3具有此对象权限,并可使用grant命令给其他用户授权,如下例,
user3将此权限授予user4:
grantselect,update(prof)
ont
touser4
数据库管理员可以使用revoke语句收回语句权限,其语法格式为:
revoke<语句权限>|<角色>[,<语句权限>|<角色>+…
from<用户名>|<角色>|public[,<用户名>|<角色>+…
?
例:
收回用户zhangyilin所拥有的createtable的语句权限。
revokecreatetable
fromzhangyilin
所有授予出去的权力在必要时都可以由数据库管理员和授权者收回,收回对象权限仍然使用revoke语句,其语法格式为:
revoke<对象权限>|<角色>[,<对象权限>|<角色>+…
from<用户名>|<角色>|public[,<用户名>|<角色>+…
?
例3-21收回用户user1对c表的查询权限。
程序清单如下:
revokeselect
onc
fromuser1
?
例3-22收回用户user3查询t表和修改教师职称的权限。
程序清单如下:
revokeselect,update(prof)
ont
fromuser3
?
在上例中,user3将对t表的权限授予了user4,在收回user3对t表的权限的同
时,系统会自动收回user4对t表的权限。
?
例3-23首先从public角色中收回select权限,然后,收回用户mary,john和
tom的特定权限。
程序清单如下:
usepubs
go
revokeselectonsfrompublic
go
revokeinsert,update,delete
ons
frommary,john,tom
?
deny语句用于拒绝给当前数据库内的用户或者角色授予权限,并防止用户或角色通
过其组或角色成员继承权限。
?
否定语句权限的语法形式为:
denyall|<语句权限>|<角色>[,<语句权限>|<角色>+…
to<用户名>|<角色>|public[,<用户名>|<角色>+…
?
否定对象权限的语法形式为:
denyall|<对象权限>[(列名[,列名+…)+*,<对象权限>+…on<对象名>
to<用户名>|<角色>|public[,<用户名>|<角色>+…
?
例3-24首先给public角色授予select权限,然后,拒绝用户mary,john和tom
的特定权限。
程序清单如下:
usepubs
go
grantselect
ons
topublic
go
denyselect,insert,update,delete
ons
tomary,john,tom
四、系统存储过程
系统存储过程的部分示例如下:
?
sp_addtype:
用于定义一个用户定义数据类型;
?
sp_configure:
用于管理服务器配置选项设置;
?
xp_sendmail:
用于发送电子邮件或寻呼信息;
?
sp_stored_procedures:
用于返回当前数据库中的存储过程的清单;
?
sp_help:
用于显示参数清单和其数据类型;
?
sp_depends:
用于显示存储过程依据的对象或者依据存储过程的对象;
?
sp_helptext:
用于显示存储过程的定义文本;
?
sp_rename:
用于修改当前数据库中用户对象的名称。
五、变量
?
变量是一种语言中必不可少的组成部分。
transact-sql语言中有两种形式的变量,一
种是用户自己定义的局部变量,另外一种是系统提供的全局变量。
?
1.局部变量
局部变量是一个能够拥有特定数据类型的对象,它的作用范围仅限制在程序内部。
局部变量被引用时要在其名称前加上标志“@”,而且必须先用declare命令定义后才可以使用。
?
定义局部变量的语法形式如下:
declaer,@local_variabledata_type-*…n+
?
其中,参数@local_variable用于指定局部变量的名称,变量名必须以符号@开头,
并且局部变量名必须符合sqlserver的命名规则。
参数data_type用于设置局部变量
的数据类型及其大小。
data_type可以是任何由系统提供的或用户定义的数据类型。
但是,局部变量不能是text,ntext或image数据类型。
?
使用declare命令声明并创建局部变量之后,会将其初始值设为null,如果想要设
定局部变量的值,必须使用select命令或者set命令。
其语法形式为:
set{@local_variable=expression}或者select{@local_variable=expression}
[,...n]
?
其中,参数@local_variable是给其赋值并声明的局部变量,参数expression是任何有
效的sqlserver表达式。
?
例3-26创建一个@myvar变量,然后将一个字符串值放在变量中,最后输出
@myvar变量的值。
程序清单如下:
declare@my