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

标签 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”。我使用默认数据库“身份验证”进行连接,并且打开了一个查询窗口。

但是这个模板对我来说没有意义。例如,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 Incorrect syntax near ','.

和:

CREATE USER user1
    FOR LOGIN user1
    WITH DEFAULT_SCHEMA = dbo
GO

给予:

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

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

最佳答案

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

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

Sql(标准)用户

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

AAD linked User

CREATE USER [<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="db88b4b6be8ea8bea99bb6a2bfb4b6bab2b5f5b8b4b6" rel="noreferrer noopener nofollow">[email protected]</a>] FROM EXTERNAL PROVIDER;
EXEC sp_addrolemember 'db_datareader' , N'<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="71221e1c1424021403311c08151e1c10181f5f121e1c" rel="noreferrer noopener nofollow">[email protected]</a>'

AAD 关联群组

CREATE USER [SomeGroup] FROM EXTERNAL PROVIDER;
EXEC sp_addrolemember 'db_datareader' , N'SomeGroup'

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

Connecting via a contained User

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

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

在服务器上创建新的登录名
master 中(通过 SSMS 中的可用数据库下拉菜单 - 这是因为 USE master 在 Azure 中不起作用):

enter image description here

创建登录名:

CREATE LOGIN username WITH password=N'password';

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

CREATE USER username FROM LOGIN username;

(我假设您希望用户和登录名绑定(bind)为用户名,但如果情况并非如此,请进行更改。)

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

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

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

关于sql-server - 如何在 SQL Azure 数据库中创建新用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19094970/

相关文章:

azure - SQL Azure 性能缓慢

c# - 如果没有提交选择,单选按钮返回错误答案

sql - 按 varchar 列排序

sql-server - 在 SQL 服务器上使用 T-SQL 将 CRON 表达式转换为下一个日期时间

python - 使用 Python 连接到 Azure SQL

azure - 如何在 Azure 中启用事件中心的创建使用者组按钮?

azure - 逻辑应用: Finding element in Json Object array (like XPath fr XML)

sql - 查询以列出父级列中的每个子记录

azure - 数据库导出抛出 SystemOutOfMemory 异常

csv - 微软Azure的架构。 CSV 到 SQL