TransactSQL 命令Word文件下载.docx
《TransactSQL 命令Word文件下载.docx》由会员分享,可在线阅读,更多相关《TransactSQL 命令Word文件下载.docx(8页珍藏版)》请在冰点文库上搜索。
参数
[@loginame=]'
登录的名称。
login的数据类型为sysname,没有默认设置。
[@passwd=]'
登录密码。
password的数据类型为sysname,默认设置为NULL。
sp_addlogin执行后,password被加密并存储在系统表中。
[@defdb=]'
登录的默认数据库(登录后登录所连接到的数据库)。
database的数据类型为sysname,默认设置为master。
[@deflanguage=]'
用户登录到SQLServer时系统指派的默认语言。
language的数据类型为sysname,默认设置为NULL。
如果没有指定language,那么language被设置为服务器当前的默认语言(由sp_configure配置变量defaultlanguage定义)。
更改服务器的默认语言不会更改现有登录的默认语言。
language保持与添加登录时所使用的默认语言相同。
[@sid=]sid
安全标识号(SID)。
sid的数据类型为varbinary(16),默认设置为NULL。
如果sid为NULL,则系统为新登录生成SID。
尽管使用varbinary数据类型,非NULL的值也必须正好为16个字节长度,且不能事先存在。
SID很有用,例如,如果要编写SQLServer登录脚本,或要将SQLServer登录从一台服务器移动到另一台,并且希望登录在服务器间具有相同的SID时。
[@encryptopt=]'
指定当密码存储在系统表中时,密码是否要加密。
encryption_option的数据类型为varchar(20),可以是下列值之一。
值
描述
NULL
加密密码。
这是默认设置。
skip_encryption
密码已加密。
SQLServer应该存储值而且不用重新对其加密。
skip_encryption_old
已提供的密码由SQLServer较早版本加密。
此选项只供升级使用。
返回代码值
0(成功)或1(失败)
注释
SQLServer登录和密码可包含1到128个字符,包括任何字母、符号和数字。
但是,登录不能:
∙含有反斜线(\)。
∙是保留的登录名称,例如sa或public,或者已经存在。
∙为NULL,或为空字符串('
'
)。
如果提供默认数据库的名称,则不用执行USE语句就可以连接到指定的数据库。
但是,不能使用默认的数据库,直到数据库所有者(使用sp_adduser或sp_addrolemember)或sp_addrole授予对该数据库的访问权限为止。
SID号是唯一的MicrosoftWindowsNT®
用户标识号。
必须保证每个用户的SID号在WindowsNT域中的唯一性。
SQLServer自动使用WindowsNTSID标识WindowsNT用户和组,并为SQLServer登录生成一个SID。
将登录添加到SQLServer时,如果密码已经是加密的形式,则使用skip_encryption取消密码加密是有用的。
如果此密码由以前的SQLServer版本加密,则使用skip_encryption_old。
不能从用户定义的事务中执行sp_addlogin。
下表显示了几个与sp_addlogin一起使用的存储过程。
存储过程
sp_grantlogin
添加WindowsNT用户或组。
sp_password
更改用户密码。
sp_defaultdb
更改用户的默认数据库。
sp_defaultlanguage
更改用户的默认语言。
权限
只有sysadmin和securityadmin固定服务器角色的成员才可以执行sp_addlogin。
示例
A.创建没有密码和主默认数据库的登录ID
下面的示例为用户Victoria创建一个SQLServer登录名,没有指定密码或默认数据库。
Victoria'
B.创建登录ID和默认数据库
此示例为用户Albert创建一个SQLServer登录,并指定密码food以及名为corporate的默认数据库。
Albert'
'
food'
corporate'
C.创建使用其它默认语言的登录ID
下面的示例为用户ClairePicard创建一个SQLServer登录名,密码为"
caniche"
,默认数据库为public_db,默认语言为French。
ClairePicard'
caniche'
public_db'
french'
D.创建带有特定SID的登录ID
下面的示例为用户Michael创建一个SQLServer登录名,密码为"
chocolate"
,默认数据库为pubs,默认语言为us_english,SID为0xABCDEFABCDEF。
Michael'
chocolate'
pubs'
us_english'
0xABCDEFABCDEF
E.创建登录ID并且不加密密码
下例在Server1上为用户Margaret创建了一个密码为"
Rose"
的SQLServer登录,再析取此加密密码,然后使用前面加密的密码将用户登录Margaret添加到Server2,但不对此密码进一步加密。
之后,用户Margaret即可使用密码"
登录到Server2。
--Server1
EXECsp_addloginMargaret,Rose
--Results
Newlogincreated.
添加数据库新用户
sp_adduser
为当前数据库中的新用户添加安全帐户。
包括此过程是为了向后兼容。
请使用sp_grantdbaccess。
sp_adduser[@loginame=]'
[,[@name_in_db=]'
user'
[,[@grpname=]'
group'
usestudent_course_sc
EXECsp_adduser'
用户的登录名称。
login的数据类型是sysname,没有默认值。
login必须是现有Microsoft®
SQLServer™登录或MicrosoftWindowsNT®
用户。
[@name_in_db=]'
新用户的名称。
user的数据类型为sysname,其默认值为NULL。
如果没有指定user,则用户的名称默认为login名称。
指定user即为新用户在数据库中给予一个不同于SQLServer上的登录ID的名称。
[@grpname=]'
组或角色,新用户自动地成为其成员。
group的数据类型为sysname,默认值为NULL。
group必须是当前数据库中有效的组或角色。
MicrosoftSQLServer7.0使用角色而不是组。
SQLServer用户名可以包含1到128个字符,包括字母、符号和数字。
但是,用户名不能:
∙含有反斜线符号(\)。
在添加完用户之后,可以使用GRANT、DENY和REVOKE语句来定义权限,这些权限控制着用户进行的活动。
使用sp_helplogin可显示有效登录名的列表。
使用sp_helprole可显示有效角色名的列表。
当指定一个角色时,用户会自动地获得为该角色定义的那些权限。
如果没有指定角色,则用户获得的权限将是授予默认public角色的权限。
若要将用户添加到角色,必须提供username的值(username可与login_id相同)。
为了访问数据库,必须使用sp_adduser或sp_grantdbaccess对登录授予访问权,或者数据库中必须存在guest安全帐户。
不能在用户定义的事务内执行sp_adduser。
只有sysadmin固定服务器角色的dbo和成员才能执行sp_adduser。
A.添加用户
下面的示例使用现有的登录Victoria,将用户Victoria添加到当前数据库中现有的fort_mudge角色中。
fort_mudge'
B.添加用户名(使用相同的登录ID)
下面的示例为登录Margaret将默认用户名Margaret添加到当前数据库,该用户名属于默认的public角色。
Margaret'
C.添加用户(使用不同的用户名)
下面的示例将Haroldq登录添加到当前的数据库中并使用Harold用户名,该用户名属于fort_mudge角色。
Haroldq'
Harold'
创建角色
sp_addrole
在当前数据库创建新的Microsoft®
SQLServer™角色。
sp_addrole[@rolename=]'
role'
[,[@ownername=]'
owner'
Execsp_addroler3
[@rolename=]'
新角色的名称。
role的数据类型为sysname,没有默认值。
role必须是有效标识符,并且不能已经存在于当前数据库中。
[@ownername=]'
新角色的所有者,owner的数据类型为sysname,默认值为dbo。
owner必须是当前数据库中的某个用户或角色。
当指定MicrosoftWindowsNT®
用户时,请指定该WindowsNT用户在数据库中可被识别的名称(用sp_grantdbaccess添加)。
SQLServer角色可以包含1到128个字符,包括字母、符号及数字。
但是,角色不能:
在添加角色之后,可以使用sp_addrolemember添加安全帐户,使其成为该角色的成员。
当使用GRANT、DENY或REVOKE语句将权限应用于角色时,角色的成员将继承这些权限,就好像将权限直接应用于其帐户一样。
说明
无法创建新的固定服务器角色。
只能在数据库级别上创建角色。
不能在用户定义的事务内使用sp_addrole。
只有sysadmin固定服务器角色及db_securityadmin和db_owner固定数据库角色的成员才能执行sp_addrole。
下面的示例将名为Managers的新角色添加到当前数据库中。
EXECsp_addrole'
Managers'
将用户增加到角色中
sp_addrolemember
将安全帐户作为当前数据库中现有Microsoft®
SQLServer™数据库角色的成员进行添加。
sp_addrolemember[@rolename=]'
[@membername=]'
security_account'
execsp_addrolemember'
r3'
当前数据库中SQLServer角色的名称。
[@membername=]'
添加到角色的安全帐户。
security_account的数据类型为sysname,没有默认值。
security_account可以是所有有效的SQLServer用户、SQLServer角色或是所有已授权访问当前数据库的MicrosoftWindowsNT®
用户或组。
当添加WindowsNT用户或组时,请指定在数据库中用来识别该WindowsNT用户或组的名称(使用sp_grantdbaccess添加)。
当使用sp_addrolemember将安全帐户添加到角色时,新成员将继承所有应用到角色的权限。
在添加SQLServer角色,使其成为另一个SQLServer角色的成员时,不能创建循环角色。
例如,如果YourRole已经是MyRole的成员,就不能将MyRole添加成为YourRole的成员。
此外,也不能将固定数据库或固定服务器角色,或者dbo添加到其他角色。
例如,不能将db_owner固定数据库角色添加成为用户定义的角色YourRole的成员。
只能使用sp_addrolemember将成员添加到SQLServer角色。
使用sp_addsrvrolemember将成员添加到固定服务器角色。
在SQLServer中,将成员添加到WindowsNT®
组是不可能的。
在用户定义的事务中不能使用sp_addrolemember。
只有sysadmin固定服务器角色和db_owner固定数据库角色中的成员可以执行sp_addrolemember,以将成员添加到固定数据库角色。
角色所有者可以执行sp_addrolemember,将成员添加到自己所拥有的任何SQLServer角色。
db_securityadmin固定数据库角色的成员可以将用户添加到任何用户定义的角色。
A.添加WindowsNT用户
下面的示例将WindowsNT用户Corporate\JeffL添加到Sales数据库,使其成为用户Jeff。
然后,再将Jeff添加到Sales数据库的Sales_Managers角色中。
由于Corporate\JeffL在Sales数据库中被当作是用户Jeff,所以必须使用sp_addrolemember来指定用户名Jeff。
USESales
GO
EXECsp_grantdbaccess'
Corporate\JeffL'
Jeff'
EXECsp_addrolemember'
Sales_Managers'
B.添加SQLServer用户
下面的示例将SQLServer用户Michael添加到当前数据库中的Engineering角色。
Engineering'
请参见