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

时间:2013-09-30 13:02:39

标签: sql-server azure azure-sql-database

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

-- =================================================
-- 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'。我连接了我的默认数据库'authentication',我打开了一个查询窗口。

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

特定用户需要有能力做任何事情。但是如何设置它以便他可以做任何事情,如果我让用户成为数据库所有者,那该怎么办?

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

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

,并提供:

  

Msg 102,Level 15,State 1,Line 1','附近的语法不正确。

CREATE USER user1
    FOR LOGIN user1
    WITH DEFAULT_SCHEMA = dbo
GO

,并提供:

  

Msg 15007,Level 16,State 1,Line 1'user1'i

不是有效的登录信息,或者您没有权限。

9 个答案:

答案 0 :(得分:87)

修改 - 包含用户(v12及更高版本)

从Sql Azure 12开始,数据库将创建为Contained Databases,这将允许用户直接在数据库中创建,而无需通过主服务器登录服务器。

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

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

Connecting via a contained User

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

为了添加@ Igorek的答案,您可以在Sql Server Management Studio中执行以下操作:

在服务器上创建新登录
master中(通过SSMS中的Available databases下拉列表 - 这是因为USE master在Azure中不起作用):

enter image description here

创建登录信息:

CREATE LOGIN username WITH password='password';

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

CREATE USER username FROM LOGIN username;

(我假设您希望用户和登录绑定为username,但如果不是这样,则更改。)

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

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

(显然,应用用户的权限应低于dbo。)

答案 1 :(得分:25)

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

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

CREATE LOGIN username WITH password='password';

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

HTH

答案 2 :(得分:19)

我在这里听到了答案,但当我尝试与新用户建立联系时,收到一条错误消息,指出"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

答案 3 :(得分:10)

我使用CodePlex的Azure Management console tool,使用非常有用的GUI,试一试。您可以保存类型代码。

答案 4 :(得分:7)

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

Create user containeduser with password = 'Password'

使用master创建的登录,包含用户登录比登录数据库更有效。您可以在http://www.sqlindepth.com/contained-users-in-sql-azure-db-v12/

找到更多详情

答案 5 :(得分:1)

创建用户,然后将用户添加到特定角色:

CREATE USER [test] WITH PASSWORD=N'<strong password>'
go
ALTER ROLE [db_datareader] ADD MEMBER [test]
go

答案 6 :(得分: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/en-us/sql/relational-databases/security/authentication-access/database-level-roles?view=sql-server-ver15

我受到@nthpixel answer的启发,但不适用于我的数据库客户端DBeaver。 它不允许我运行USE [master]use [my-db]语句。

https://azure.microsoft.com/en-us/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

List of all users in Azure SQL

答案 7 :(得分:0)

我认为模板使用以下表示法:变量名,变量类型,默认值。

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

它限制为128个Unicode字符。

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

答案 8 :(得分:0)

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

详细说明如下:
  - Azure SQL数据库订户帐户
  - 使用Azure Active Directory用户访问数据库
  - 服务器级主要帐户(不受限制的访问)
  - 将用户添加到dbmanager数据库角色

我用这个和斯图尔特的答案做了以下事情:
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;