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

61 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
Run Code Online (Sandbox Code Playgroud)

我想创建一个名为user1的用户,密码为'user1pass'.我连接了我的默认数据库'authentication',我打开了一个查询窗口.

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

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

到目前为止,我尝试过:

CREATE USER user1, sysname, user1
    FOR LOGIN user1, sysname, user1
    WITH DEFAULT_SCHEMA = dbo, sysname, dbo
GO
Run Code Online (Sandbox Code Playgroud)

赠送:

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

和:

CREATE USER user1
    FOR LOGIN user1
    WITH DEFAULT_SCHEMA = dbo
GO
Run Code Online (Sandbox Code Playgroud)

赠送:

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

不是有效登录或您没有权限.

Stu*_*tLC 95

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

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

CREATE USER [MyUser] WITH PASSWORD = 'Secret';
ALTER ROLE [db_datareader] ADD MEMBER [MyUser];
Run Code Online (Sandbox Code Playgroud)

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

通过包含的用户连接

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

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

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

在此输入图像描述

创建登录:

CREATE LOGIN username WITH password='password';
Run Code Online (Sandbox Code Playgroud)

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

CREATE USER username FROM LOGIN username;
Run Code Online (Sandbox Code Playgroud)

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

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

EXEC sp_addrolemember N'db_owner', N'username'
GO
Run Code Online (Sandbox Code Playgroud)

(显然,应用程序用户的权限应该少于dbo.)

  • 这个应该是公认的答案. (4认同)

Igo*_*rek 30

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

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

CREATE LOGIN username WITH password='password';
Run Code Online (Sandbox Code Playgroud)

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

HTH

  • 在SQL Azure中从主服务器切换到另一个数据库后,无法切换数据库.右键单击查询窗口并单击"连接 - >更改连接" - 这将允许您在创建用户后重新连接不同的凭据 (2认同)
  • 该帖子提供了一个非常清晰,易于理解的示例:http://kitsula.com/Article/How-to-create-custom-user-login-for-Azure-SQL-Database (2认同)
  • 这是误导."包含的用户"没有在主服务器中登录,因此您只需在数据库中创建一个用户.事实上,建议使用此方法,因为`在包含的数据库中,创建用户有助于将数据库与数据库引擎实例分开,以便可以轻松地将数据库移动到另一个SQL Server实例.`https://docs.microsoft.com/en-us/sql/t-sql/statements/create-user-transact-sql (2认同)

nth*_*xel 20

我按照这里的答案,但当我尝试连接我的新用户时,我收到一条错误消息说明"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
Run Code Online (Sandbox Code Playgroud)


Jor*_*rge 10

我使用CodePlex 的Azure管理控制台工具,使用非常有用的GUI,试一试.您可以保存类型的一些代码.


Sir*_*thi 9

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

Create user containeduser with password = 'Password'
Run Code Online (Sandbox Code Playgroud)

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