sql之AWS RDS 为数据库创建用户

shihaiming 阅读:69 2025-01-19 22:14:33 评论:0

我有一个在 AWS 中启动的 RDS 实例,运行 SQL Server 2012。我能够正常登录和创建新数据库(通过 SSMS 和 sqlcmd.exe)。

我面临的问题是,由于在 RDS 创建过程中没有足够的“godmode”帐户设置权限,我无法为我的每个应用程序数据库创建用户。

我在此 RDS 实例上有 > 5 个应用程序及其数据库,并希望对其进行设置,以便每个应用程序都有自己的登录名,并且仅是其自己数据库的用户。

我可以创建登录名,但我不能将该登录名作为用户分配给数据库。这是不能做的事吗?我知道 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 的实际预期行为吗?

请您参考如下方法:

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

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

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

请务必注意 sp_addlogin 将很快在 SQL Server 的 future 版本中删除。

This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Use CREATE LOGIN instead.



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

希望这可以帮助


标签:数据库
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号