sql2005系统存储过程sp_addlogin用法

发布时间:2020-06-08编辑:脚本学堂
有关sql server 2005数据库中sp_addlogin存储过程的用法,sp_addlogin用于创建新的数据库登录用户,需要的朋友参考下。

sql server 2005系统存储过程sp_addlogin用法

首先,分享下sp_addlogin存储过程代码。
 

复制代码 代码示例:

--proc
--sp_addlogin
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER procedure [sys].[sp_addlogin]
    @loginame  sysname
   ,@passwd         sysname = Null
   ,@defdb          sysname = 'master'      -- UNDONE: DEFAULT CONFIGURABLE???
   ,@deflanguage    sysname = Null
   ,@sid   varbinary(16) = Null
   ,@encryptopt  varchar(20) = Null
AS
    -- SETUP RUNTIME OPTIONS / DECLARE VARIABLES --
 set nocount on
 declare @exec_stmt nvarchar(4000)
 declare @hextext varchar(256)
 declare @ret int

    -- DISALLOW USER TRANSACTION --
 set implicit_transactions off
 IF (@@trancount > 0)
 begin
  raiserror(15002,-1,-1,'sys.sp_addlogin')
  return (1)
 end

    -- VALIDATE LOGIN NAME:
 execute @ret = sys.sp_validname @loginame
 if (@ret <> 0)
        return (1)

 set @exec_stmt = 'create login ' + quotename(@loginame)

    if @passwd is null
        select @passwd = ''

 if (@encryptopt is null)
  set @exec_stmt = @exec_stmt + ' with password = ' + quotename(@passwd, '''')
 else
 begin
  declare @passwdbin varbinary(256)
  set @passwdbin = convert(varbinary(256), @passwd)
  execute sys.sp_hexadecimal @passwdbin, @hextext OUT
  set @exec_stmt = @exec_stmt + ' with password = ' + @hextext

  if (@encryptopt = 'skip_encryption_old')
   set @exec_stmt = @exec_stmt + ' hashed '
  else if (@encryptopt = 'skip_encryption')
   set @exec_stmt = @exec_stmt + ' hashed '
  else
  begin
   raiserror(15600,-1,-1,'sys.sp_addlogin')
   return 1
  end
 end
 
    if (@defdb is not null)
  set @exec_stmt = @exec_stmt + ', default_database = ' + quotename(@defdb)

 if (@deflanguage is not null)
  set @exec_stmt = @exec_stmt + ', default_language = ' + quotename(@deflanguage)

 if (@sid is not null)
 begin
  execute sys.sp_hexadecimal @sid, @hextext OUT
  set @exec_stmt = @exec_stmt + ', sid = ' + @hextext
 end

 exec (@exec_stmt)

 if @@error <> 0
  return (1)

    -- RETURN SUCCESS --
 return  (0) -- sp_addlogin

sp_addlogin创建新的 Microsoft SQL Server™ 登录,使用户得以连接使用 SQL Server 身份验证的 SQL Server 实例。
语法sp_addlogin [ @loginame = ] 'login'
[ , [ @passwd = ] 'password' ]
[ , [ @defdb = ] 'database' ]
[ , [ @deflanguage = ] 'language' ]
[ , [ @sid = ] sid ]
[ , [ @encryptopt = ] 'encryption_option' ]

参数[@loginame =] 'login'
登录的名称。login 的数据类型为 sysname,没有默认设置。

[@passwd =] 'password'
登录密码。password 的数据类型为 sysname,默认设置为 NULL。sp_addlogin 执行后,password 被加密并存储在系统表中。

[@defdb =] 'database'
登录的默认数据库(登录后登录所连接到的数据库)。database 的数据类型为 sysname,默认设置为 master。

[@deflanguage =] 'language'
用户登录到 SQL Server 时系统指派的默认语言。language 的数据类型为 sysname,默认设置为 NULL。如果没有指定 language,那么 language 被设置为服务器当前的默认语言(由 sp_configure 配置变量 default language 定义)。更改服务器的默认语言不会更改现有登录的默认语言。language 保持与添加登录时所使用的默认语言相同。

[@sid =] sid
安全标识号 (SID)。sid 的数据类型为 varbinary(16),默认设置为 NULL。如果 sid 为 NULL,则系统为新登录生成 SID。尽管使用 varbinary 数据类型,非 NULL 的值也必须正好为 16 个字节长度,且不能事先存在。SID 很有用,例如,如果要编写 SQL Server 登录脚本,或要将 SQL Server 登录从一台服务器移动到另一台,并且希望登录在服务器间具有相同的 SID 时。

[@encryptopt =] 'encryption_option'
指定当密码存储在系统表中时,密码是否要加密。encryption_option 的数据类型为 varchar(20),可以是下列值之一。

描述
NULL
加密密码。这是默认设置。
skip_encryption
密码已加密。SQL Server 应该存储值而且不用重新对其加密。
skip_encryption_old
已提供的密码由 SQL Server 较早版本加密。SQL Server 应该存储值而且不用重新对其加密。此选项只供升级使用。
返回代码值0(成功)或 1(失败)
注释SQL Server 登录和密码可包含 1 到 128 个字符,包括任何字母、符号和数字。但是,登录不能: 含有反斜线 ()。
是保留的登录名称,例如 sa 或 public,或者已经存在。
为 NULL,或为空字符串 ('')。 如果提供默认数据库的名称,则不用执行 USE 语句就可以连接到指定的数据库。但是,不能使用默认的数据库,直到数据库所有者(使用 sp_adduser 或 sp_addrolemember)或 sp_addrole 授予对该数据库的访问权限为止。
SID 号是唯一的 Microsoft Windows NT&reg; 用户标识号。必须保证每个用户的 SID 号在 Windows NT 域中的唯一性。SQL Server 自动使用 Windows NT SID 标识 Windows NT 用户和组,并为 SQL Server 登录生成一个 SID。
将登录添加到 SQL Server 时,如果密码已经是加密的形式,则使用 skip_encryption 取消密码加密是有用的。如果此密码由以前的 SQL Server 版本加密,则使用 skip_encryption_old。
不能从用户定义的事务中执行 sp_addlogin。
下表显示了几个与 sp_addlogin 一起使用的存储过程。

存储过程
描述
sp_grantlogin
添加 Windows NT 用户或组。
sp_password
更改用户密码。
sp_defaultdb
更改用户的默认数据库。
sp_defaultlanguage
更改用户的默认语言。
权限只有 sysadmin 和 securityadmin 固定服务器角色的成员才可以执行 sp_addlogin。
示例A. 创建没有密码和主默认数据库的登录 ID下面的示例为用户 Victoria 创建一个 SQL Server 登录名,没有指定密码或默认数据库。
EXEC sp_addlogin 'Victoria'B. 创建登录 ID 和默认数据库此示例为用户 Albert 创建一个 SQL Server 登录,并指定密码 food 以及名为 corporate 的默认数据库。
EXEC sp_addlogin 'Albert', 'food', 'corporate'C.创建使用其它默认语言的登录 ID下面的示例为用户 Claire Picard 创建一个 SQL Server 登录名,密码为"caniche",默认数据库为 public_db,默认语言为 French。
EXEC sp_addlogin 'Claire Picard', 'caniche', 'public_db', 'french'D. 创建带有特定 SID 的登录 ID下面的示例为用户 Michael 创建一个 SQL Server 登录名,密码为"chocolate",默认数据库为 pubs,默认语言为 us_english,SID 为 0x0123456789ABCDEF0123456789ABCDEF。
EXEC sp_addlogin 'Michael', 'chocolate', 'pubs', 'us_english', 0x0123456789ABCDEF0123456789ABCDEFE. 创建登录 ID 并且不加密密码下例在 Server1 上为用户 Margaret 创建了一个密码为"Rose"的 SQL Server 登录,再析取此加密密码,然后使用前面加密的密码将用户登录 Margaret 添加到 Server2,但不对此密码进一步加密。之后,用户 Margaret 即可使用密码"Rose"登录到 Server2。
-- Server1EXEC sp_addlogin Margaret, Rose--ResultsNew login created.-- Extract encrypted password for MargaretSELECT CONVERT(VARBINARY(32), password) FROM syslogins WHERE name = 'Margaret'--Results------------------------------------------------------------------ 0x2131214A212B57304F5A552A3D513453(1 row(s) affected)-- Server2EXEC sp_addlogin 'Margaret', 0x2131214A212B57304F5A552A3D513453, @encryptopt = 'skip_encryption'