![](/img/trans.png)
[英]How can I create a contained user on an Azure SQL database using C#?
[英]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”。
角色列表:
我受到@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
我認為模板使用以下符號:變量名、變量類型、默認值。
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.