82

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

-- =================================================
-- 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 不是有效的登录或您没有权限。

4

9 回答 9

129

编辑 - 包含的用户(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 databasesSSMS 中的下拉菜单 - 这是因为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。)

于 2014-12-24T07:25:16.707 回答
39

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

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

CREATE LOGIN username WITH password='password';

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

高温高压

于 2013-09-30T14:12:02.020 回答
31

我按照此处的答案进行操作,但是当我尝试与新用户联系时,收到一条错误消息,指出"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
于 2016-03-04T01:04:40.693 回答
12

您可以在 SQL DB V12 中简单地创建一个包含的用户。

Create user containeduser with password = 'Password'

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

于 2015-07-03T03:33:51.180 回答
9

我用的是CodePlex的Azure管理控制台工具,GUI非常好用,试试吧。您可以保存键入一些代码。

于 2013-10-03T08:36:18.323 回答
3

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

Azure SQL 中所有用户的列表

于 2020-11-23T18:41:52.357 回答
2

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

CREATE USER [test] WITH PASSWORD=N'<strong password>'
go
ALTER ROLE [db_datareader] ADD MEMBER [test]
go
于 2018-07-13T13:47:01.483 回答
0

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

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

它仅限于 128 个 Unicode 字符。

-- same as sysname type
declare @my_sysname nvarchar(128);
于 2013-09-30T13:15:48.900 回答
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;
于 2016-09-07T18:42:32.677 回答