簡體   English   中英

如何在 SQL Azure 數據庫中創建新用戶?

[英]How do I create a new user in a SQL Azure 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

給予:

消息 102,級別 15,狀態 1,第 1 行“,”附近的語法不正確。

和:

CREATE USER user1
    FOR LOGIN user1
    WITH DEFAULT_SCHEMA = dbo
GO

給予:

消息 15007,級別 16,狀態 1,第 1 行 'user1' i

s 不是有效的登錄名或您沒有權限。

編輯 - 包含的用戶(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 (通過 SSMS 中的Available databases下拉菜單 - 這是因為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少。)

查看此鏈接以獲取所有信息: 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

我遵循了此處的答案,但是當我嘗試與新用戶連接時,收到一條錯誤消息,指出"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

您可以簡單地在 SQL DB V12 中創建一個包含的用戶。

Create user containeduser with password = 'Password'

包含用戶登錄比使用 master 創建的登錄名登錄數據庫更高效。 你可以找到更多細節@ http://www.sqlindepth.com/contained-users-in-sql-azure-db-v12/

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

創建用戶,然后將用戶添加到特定角色:

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

1 在連接到 master db 時創建登錄名(在您的數據庫客戶端中打開一個到 master db 的連接)

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答案的啟發,但它不適用於我的數據庫客戶端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 中所有用戶的列表

我認為模板使用以下符號:變量名、變量類型、默認值。

Sysname 是一種內置數據類型,可以保存系統對象的名稱。

它被限制為 128 個 Unicode 字符。

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

我發現這個鏈接非常有幫助:
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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM