是否希望为开发人员添加对数据库的完全访问权限。 我希望他们能够完全控制它......包括删除它,如果他们想要的话。 不知怎的,我偶然发现了两种方式。这些是正确的方法吗?
命令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
答案 0 :(得分:1)
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';
参考文献: