AWS RDS为数据库创建用户

时间:2016-08-25 04:45:29

标签: sql tsql amazon-web-services sql-server-2012 amazon-rds

我在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 个答案:

答案 0 :(得分:1)

到目前为止,我从未尝试通过SQL进行此操作,但是已经通过SSMS进行了几次没有问题。请尝试以下操作(以您之前在AWS RDS控制台指定的用户身份登录):

  1. 创建登录信息。保持"服务器角色" as" public"。
  2. 在“用户映射”选项卡下,将新创建的登录映射到所需的特定数据库。选择" db_owner"作为角色。我通常只是将默认架构留给dbo,但这取决于你。

答案 1 :(得分:1)

尝试此SQL命令:

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

答案 2 :(得分:1)

我也有这个问题,但在我的情况下,解决方案是确保在创建登录之前调用USE [Application1]而不是USE [master](我知道开头的帖子已经有了,但对于后人和#39; s缘故我会在这里留下这个答案。)

USE [Application1] 

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

答案 3 :(得分:1)

我没有使用sp_addlogin为用户创建登录。我是这样做的,而且很有效。

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

然后我可以做

CREATE USER userName FOR LOGIN userName WITH DEFAULT_SCHEMA=dbo

请注意,很快将在SQL Server的未来版本中删除sp_addlogin。

  

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

https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-addlogin-transact-sql?view=sql-server-2017

希望这有帮助