我在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的实际预期行为吗?
答案 0 :(得分:1)
到目前为止,我从未尝试通过SQL进行此操作,但是已经通过SSMS进行了几次没有问题。请尝试以下操作(以您之前在AWS RDS控制台指定的用户身份登录):
答案 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 代替。
希望这有帮助