如何在SQL Azure数据库中创建新用户?


77

我正在尝试使用以下模板:

-- =================================================
-- Create User as DBO template for SQL Azure Database
-- =================================================
-- For login <login_name, sysname, login_name>, create a user in the database
CREATE USER <user_name, sysname, user_name>
    FOR LOGIN <login_name, sysname, login_name>
    WITH DEFAULT_SCHEMA = <default_schema, sysname, dbo>
GO

-- Add user to the database owner role
EXEC sp_addrolemember N'db_owner', N'<user_name, sysname, user_name>'
GO

我想创建一个名为user1的用户,密码为“ user1pass”。我连接了默认数据库“身份验证”,并打开了查询窗口。

但是模板对我来说没有意义。例如,什么是sysname,该在哪里提供密码,以及应该将什么用作default_schema?

特定用户需要有权执行所有操作。但是,如何设置它以便他可以执行所有操作?如果我将用户设为数据库所有者,该操作就完成了吗?

到目前为止,我已经尝试过:

CREATE USER user1, sysname, user1
    FOR LOGIN user1, sysname, user1
    WITH DEFAULT_SCHEMA = dbo, sysname, dbo
GO

给予:

消息102,级别15,状态1,行1','附近的语法不正确。

和:

CREATE USER user1
    FOR LOGIN user1
    WITH DEFAULT_SCHEMA = dbo
GO

给予:

消息15007,级别16,状态1,第1行“ user1” i

s有效的登录名或您没有权限。


Answers:


34

检查此链接以获取所有信息:https : //azure.microsoft.com/zh-cn/blog/adding-users-to-your-sql-azure-database/

首先,您需要为SQL Azure创建一个登录名,其语法如下:

CREATE LOGIN username WITH password='password';

此命令需要在master db中运行。之后,您才可以运行命令在数据库中创建用户。SQL Azure或SQL Server的工作方式是先在服务器级别创建一个登录名,然后将其映射到每个数据库中的用户。

高温超导


因此,第一次我应该说“使用主机”,然后创建登录名,然后说“使用身份验证”?另外,在查询窗口中如何以其他用户身份连接,以便可以尝试一下?

2
在SQL Azure中从主数据库切换到另一个数据库后,无法切换数据库。右键单击查询窗口,然后单击“连接->更改连接”-创建用户后,这将允许您使用不同的凭据重新连接
Igorek 2013年

我在使用最新的SQL Azure服务器(V12)时遇到一些困难。有什么线索吗?
Geethanga

2
:后给出了一个真正明确和易于遵循例如kitsula.com/Article/...
uniquelau

2
这是误导。“包含用户”在master上没有登录,因此您只需在数据库本身中创建一个用户即可。实际上,建议使用此方法,因为In a contained database, creating users helps separate the database from the instance of the Database Engine so that the database can easily be moved to another instance of SQL Server. docs.microsoft.com/zh-cn/sql/t-sql/statements/…–
Simon_Weaver

117

编辑-包含的用户(v12及更高版本)

从Sql Azure 12开始,数据库将创建为“包含的数据库”,这将允许直接在您的数据库中创建用户,而无需通过master登录服务器。

CREATE USER [MyUser] WITH PASSWORD = 'Secret';
ALTER ROLE [db_datareader] ADD MEMBER [MyUser];

请注意,使用包含的用户连接到数据库时,必须始终在连接字符串中指定数据库。

通过包含的用户进行连接

传统服务器登录-数据库用户(Pre v 12)

只需添加到@Igorek的答案,即可在Sql Server Management Studio中执行以下操作:

在服务器上创建新的登录
master(通过Available databases在SSMS下拉-这是因为USE master没有工作在Azure中):

在此处输入图片说明

创建登录名:

CREATE LOGIN username WITH password='password';

在数据库中创建新用户
切换到实际数据库(同样通过可用数据库下拉列表或新连接)

CREATE USER username FROM LOGIN username;

(我假设您希望用户和登录名绑定为username,但如果不是这种情况,请进行更改。)

现在将用户添加到相关的安全角色

EXEC sp_addrolemember N'db_owner', N'username'
GO

(显然,应用程序用户的特权应少于dbo。)


这个答案似乎已经过时了,可以直接在数据库实例本身中创建用户,请参阅:docs.microsoft.com/en-us/sql/t-sql/statements/…–
tbone

您是对的-从12开始,现在有包含用户,不需要该CREATE LOGIN步骤。我已经更新了。
StuartLC

25

我遵循了这里的答案,但是当我尝试与新用户建立联系时,出现了一条错误消息,指出"The server principal 'newuser' is not able to access the database 'master' under the current security context"

我还必须在主表中创建一个新用户才能成功使用SSMS登录。

USE [master]
GO
CREATE LOGIN [newuser] WITH PASSWORD=N'blahpw'
GO
CREATE USER [newuser] FOR LOGIN [newuser] WITH DEFAULT_SCHEMA=[dbo]
GO

USE [MyDatabase]
CREATE USER newuser FOR LOGIN newuser WITH DEFAULT_SCHEMA = dbo
GO
EXEC sp_addrolemember N'db_owner', N'newuser'
GO

11

您只需在SQL DB V12中创建一个包含的用户。

Create user containeduser with password = 'Password'

包含的用户登录比使用master创建的登录名登录数据库更有效。您可以在http://www.sqlindepth.com/contained-users-in-sql-azure-db-v12/中找到更多详细信息


1
这需要包含某些约束的数据库
Shane Courtrille

在SQL Azure上,所有数据库都支持此功能。实际上,它不能被禁用。
Simon_Weaver

1
这是IMO的最佳答案。简短而简洁,它是可行的。
菲利普

最佳答案,但无论如何Azure SQL很烂
工具包

“随着Microsoft不断发展SQL数据库服务并朝着具有更高保证的SLA的方向发展,您可能需要切换到所包含的数据库用户模型和数据库范围的防火墙规则,以获得给定数据库的更高可用性SLA和更高的最大登录率。Microsoft鼓励您今天考虑这种变化。” - docs.microsoft.com/en-us/sql/relational-databases/security/...
亚历山大



1

1在连接到主数据库的同时创建登录名(在数据库客户端中,打开到主数据库的连接)

CREATE LOGIN 'testUserLogin' WITH password='1231!#ASDF!a';

2在连接数据库时创建一个用户(在数据库客户端中,打开与数据库的连接)

CREATE USER testUserLoginFROM LOGIN testUserLogin; 请注意,用户名与登录名相同。当我使用其他用户名和登录名时,它对我不起作用。

3添加所需的权限

EXEC sp_addrolemember db_datawriter, 'testUser'; 您可能还需要添加“ db_datareader”。

角色列表:

https://docs.microsoft.com/zh-cn/sql/relational-databases/security/authentication-access/database-level-roles?view=sql-server-ver15

我受到@nthpixel 答案的启发,但不适用于我的数据库客户端DBeaver。它不允许我跑步USE [master]use [my-db]声明。

https://azure.microsoft.com/zh-cn/blog/adding-users-to-your-sql-azure-database/

如何测试您的用户?

在主数据库连接中运行查询波纹管。

SELECT A.name as userName, B.name as login, B.Type_desc, default_database_name, B.*
FROM sys.sysusers A
    FULL OUTER JOIN sys.sql_logins B
       ON A.sid = B.sid
WHERE islogin = 1 and A.sid is not null

Azure SQL中的所有用户列表


0

我认为模板使用以下符号:变量名称,变量类型,默认值。

Sysname是一种内置数据类型,可以保存系统对象的名称。

仅限128个Unicode字符。

-- same as sysname type
declare @my_sysname nvarchar(128);

谢谢,但是按照您所说的,那么我将如何创建用户名和密码。我看不到设置密码的方法。

0

我发现此链接非常有帮助:https :
//azure.microsoft.com/en-gb/documentation/articles/sql-database-manage-logins/

它详细说明了以下内容:
-Azure SQL数据库订阅者帐户
-使用Azure Active Directory用户访问数据库
-服务器级主体帐户(无限制访问)
-将用户添加到dbmanager数据库角色

我用这个和Stuart的答案来做以下事情:
master数据库上(请参阅有关谁对此拥有权限的链接):

CREATE LOGIN [MyAdmin] with password='ReallySecurePassword'

然后在有问题的数据库上:

CREATE USER [MyAdmin] FROM LOGIN [MyAdmin]
ALTER ROLE db_owner ADD MEMBER [MyAdmin]

您还可以根据链接创建这样的用户:

CREATE USER [mike@contoso.com] FROM EXTERNAL PROVIDER;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.