AWS RDS 创建数据库用户

6
我在AWS中创建了一个RDS实例,运行SQL Server 2012。我能够登录并成功创建新的数据库(通过SSMS和sqlcmd.exe)。
我面临的问题是,由于在RDS创建过程中设置的“godmode”帐户权限不足,我无法为每个应用程序数据库创建用户。
我有超过5个应用程序的数据库在这个RDS实例上,并希望设置每个应用程序都有自己的登录信息,并且仅作为其自己的数据库的用户。
我可以创建登录信息,但无法将该登录信息分配为数据库的用户。这是否意味着无法完成此操作?我知道RDS有一些限制,但这似乎应该是可能的。我的用例不可能如此独特!
我尝试像这样设置用户:
DECLARE @Username nvarchar(255) = 'test1';
DECLARE @Password nvarchar(255) = 'sUp3rS3crEt';

USE [Application1] 

IF NOT EXISTS 
    (SELECT name  
     FROM master.sys.server_principals
     WHERE name = @Username)
BEGIN
    EXEC sp_addlogin @Username, @Password
END

BEGIN
EXEC sp_adduser @Username, @Username, 'db_owner'
END

在使用sp_adduser时失败

Msg 15247, Level 16, State 1, Procedure sp_adduser, Line 35 [Batch Start Line 0] 
User does not have permission to perform this action.

尝试通过SSMS手动创建用户也会因权限问题而失败。

这是RDS与Sql Server 2012的实际预期行为吗?

4个回答

3
我没有使用sp_addlogin来创建用户的登录信息。我是这样做的,它可以工作:

CREATE LOGIN userName WITH PASSWORD = 'y0urPa$$w0rd'

那么我可以做什么?
CREATE USER userName FOR LOGIN userName WITH DEFAULT_SCHEMA=dbo

重要提示:请注意,sp_addlogin功能将在未来的SQL Server版本中被删除。

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

https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-addlogin-transact-sql?view=sql-server-2017 希望对您有所帮助。

1
到目前为止,我从未尝试通过SQL来做这件事,但是已经在SSMS上几次成功完成了。请尝试以下步骤(以您之前在AWS RDS控制台指定的用户身份登录):
  1. 创建登录名。将“服务器角色”保留为“public”。
  2. 在用户映射选项卡下,将新创建的登录名映射到您想要的特定数据库。选择“db_owner”作为角色。我通常只将默认模式保留为dbo,但这取决于您。

1
我也遇到了这个问题,但在我的情况下,解决方法是确保在创建登录之前调用USE [Application1]而不是USE [master](我意识到开头的帖子已经有了这个步骤,但为了后人的利益,我将在此留下这个答案)。
即:
USE [Application1] 

IF NOT EXISTS 
    (SELECT name  
     FROM master.sys.server_principals
     WHERE name = @Username)
BEGIN
    EXEC sp_addlogin @Username, @Password
END

1

尝试这个SQL命令:

CREATE USER [MyUSER] FOR LOGIN [MyUser] WITH DEFAULT_SCHEMA=[dbo]

1
看起来 WITH DEFAULT_SCHEMA=[dbo] 已经解决了问题。谢谢! - Adil B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接