web-dev-qa-db-ja.com

SQL Azureデータベースに新しいユーザーを作成するにはどうすればよいですか?

次のテンプレートを使用しようとしています。

-- =================================================
-- 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

「user1pass」のパスワードでuser1というユーザーを作成したいと思います。デフォルトのデータベース「認証」に接続し、クエリウィンドウを開いています。

しかし、テンプレートは私には意味がありません。たとえば、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有効なログインではないか、権限がありません。

58
user1679941

すべての情報については、このリンクを確認してください。 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

27
Igorek

編集-包含ユーザー(v12以降)

Sql Azure 12の時点で、データベースは Contained Databases として作成されます。これにより、マスター経由でサーバーにログインする必要なく、データベースにユーザーを直接作成できます。

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

包含ユーザーを使用しているときにデータベースに接続するときは、接続文字列で常にデータベースを指定する必要があることに注意してください。

Connecting via a contained User

従来のサーバーログイン-データベースユーザー(12より前)

@Igorekの答えに追加するだけで、Sql Server Management Studioで次のことができます。

サーバーに新しいログインを作成します
masterで(SSMSのAvailable databasesドロップダウン経由-これは、USE masterがAzureで機能しないためです):

enter image description here

ログインを作成します。

CREATE LOGIN username WITH password='password';

データベースに新しいユーザーを作成します
実際のデータベースへの切り替え(利用可能なデータベースのドロップダウン、または新しい接続を使用)

CREATE USER username FROM LOGIN username;

(ユーザーとログインをusernameとして結び付けたいと思っていましたが、そうでない場合は変更します。)

次に、ユーザーを関連するセキュリティロールに追加します

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

(明らかに、アプリユーザーはdboよりも少ない権限を持っている必要があります。)

88
StuartLC

ここで答えに従いましたが、新しいユーザーと接続しようとすると、"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
19
nthpixel

CodePlexの Azure管理コンソールツール を使用します。非常に便利なGUIで試してみます。いくつかのコードを入力して保存できます。

10
Jorge

SQL DB V12に含まれるユーザーを簡単に作成できます。

Create user containeduser with password = 'Password'

含まれるユーザーログインは、masterによって作成されたログインを使用してデータベースにログインするよりも効率的です。詳細を見つけることができます@ http://www.sqlindepth.com/contained-users-in-sql-Azure-db-v12/

8

ユーザーを作成してから、特定のロールにユーザーを追加します。

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

このリンクは非常に役に立ちました。
https://Azure.Microsoft.com/en-gb/documentation/articles/sql-database-manage-logins/

以下のような詳細があります:
-Azure SQL Databaseサブスクライバーアカウント
-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 [[email protected]] FROM EXTERNAL PROVIDER;
0
noelicus

テンプレートでは、変数名、変数タイプ、デフォルト値の表記を使用していると思います。

Sysnameは、システムオブジェクトの名前を保持できる組み込みデータ型です。

128 Unicode文字に制限されています。

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