sp_addrolemember和alter user与默认架构有什么区别......?

时间:2016-04-02 16:09:51

标签: sql-server sql-server-2008-r2

是否希望为开发人员添加对数据库的完全访问权限。 我希望他们能够完全控制它......包括删除它,如果他们想要的话。 不知怎的,我偶然发现了两种方式。这些是正确的方法吗?

  1. 两个命令之间的访问/权限有什么区别?
  2. 完成我想要的正确命令是什么? 感谢。
  3. 命令1

    USE [testdb1]
    GO
    ALTER USER [john] WITH DEFAULT_SCHEMA=[dbo]
    GO
    

    命令2

    USE [testdb1]
    GO
    EXEC sp_addrolemember N'db_owner', N'john'
    GO
    

3 个答案:

答案 0 :(得分:1)

MSDNanswering的绝佳来源:

  

sp_addrolemember

     

添加数据库用户,数据库角色,Windows登录或Windows组   到当前数据库中的数据库角色。

     

ALTER USER

     

重命名数据库用户或更改其默认架构。

还要注意语法:

sp_addrolemember [ @rolename = ] 'role',
    [ @membername = ] 'security_account'


  -- SQL Server Syntax
ALTER USER userName  
     WITH <set_item> [ ,...n ]
[;]

<set_item> ::= 
      NAME = newUserName 
    | DEFAULT_SCHEMA = { schemaName | NULL }
    | LOGIN = loginName
    | PASSWORD = 'password' [ OLD_PASSWORD = 'oldpassword' ]
    | DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language alias> }
    | ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] 

换句话说,使用sp_addrolemember,您只能在当前数据库添加 database user, database role, Windows login, or Windows group

但是使用ALTER USER,您可以更改其名称,默认架构,登录名,密码等......使用sp_addrolemember无法完成某些操作。

检查两条MSDN链接。它们是SQL Server

的绝佳信息来源

至于您的情况,您可能希望使用sp_addrolemember,前提是您已经拥有可以为用户提供所需访问权限的角色(最有可能是db_owner)。

USE [testdb1]
GO
EXEC sp_addrolemember N'db_owner', N'john'
GO

当您更改用户的默认架构时,并不意味着它们获得新角色 - 但它们会获得新的默认架构,并且可访问性将取决于现有用户角色的新架构中的安全规则。 可以为您提供所需内容,具体取决于用户在默认架构中的安全规则。

答案 1 :(得分:1)

根据latest sp_addrolemember documentation,应避免使用sp_addrolemember,而应使用ALTER ROLE

  

此功能将在Microsoft SQL Server的未来版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。改为使用ALTER ROLE。

答案 2 :(得分:0)

从SQL Server 2012开始,两者之间没有区别。

alter role [RoleName] add member [MemberName];

相当于

exec sp_addrolemember N'RoleName', N'MemberName';

参考文献:

https://msdn.microsoft.com/en-us/library/ms189775.aspx

https://msdn.microsoft.com/en-us/library/ms187750.aspx