SQL Server Expressでadminユーザーを(abcdパスワード付きで)作成するスクリプトを書きたいのですが。また、このユーザーにadmin完全な権限を割り当てたいと思います。
回答:
あなたの質問に基づいて、ユーザーとログインの違いについて少し混乱していると思います。A ログインサーバにログインすることができ、誰にパスワードが設定されている誰か-全体としてSQL Server上のアカウントです。ユーザーは、あるログイン特定のデータベースへのアクセス権を持ちます。
ログインの作成は簡単で、特定のデータベースにログイン用のユーザーアカウントを作成する前に(明らかに)実行する必要があります。
CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD'
GO
宣言したログインを使用して、db_owner特権を持つユーザーを作成する方法を次に示します。
Use YourDatabase;
GO
IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'NewAdminName')
BEGIN
CREATE USER [NewAdminName] FOR LOGIN [NewAdminName]
EXEC sp_addrolemember N'db_owner', N'NewAdminName'
END;
GO
今、ログインは上記のように少し流動的です。たとえば、データベースがインストールされると、Windows管理者アカウント用のログインアカウントが(ほとんどのSQL Serverインストールで)自動的に作成されます。ほとんどの場合、データベースを管理しているときにそれを使用します(すべての特権を持っています)。
ただし、アプリケーションからSQL Serverにアクセスする場合は、サーバーを「混合モード」(WindowsとSQLの両方のログイン)に設定し、上記のようにログインを作成します。次に、アプリに必要なものに基づいて、そのSQLログインに権限を「付与」します。詳細はこちらをご覧ください。
更新:アーロンは、sp_addsrvrolememberを使用して、準備されたロールをログインアカウントに割り当てることを指摘しています。これは良いアイデアです。手動で特権を付与するよりも速くて簡単です。グーグルするとたくさんのリンクが表示されます。ただし、ログインとユーザーの違いを理解する必要があります。
サーバー全体または特定のデータベースの完全な管理者権限はありますか?他の人はデータベースについては答えましたが、サーバーについては:
USE [master];
GO
CREATE LOGIN MyNewAdminUser
WITH PASSWORD = N'abcd',
CHECK_POLICY = OFF,
CHECK_EXPIRATION = OFF;
GO
EXEC sp_addsrvrolemember
@loginame = N'MyNewAdminUser',
@rolename = N'sysadmin';
使用しているSQL Server Expressのバージョンによっては、CHECK_パラメータを省略しなければならない場合があります(質問にこの情報を含めると、ほとんどの場合に役立ちます)。
一般的なスクリプトを作成したい場合は、ユーザー名とデータベース名で置換したExecuteステートメントで実行できます。
Declare @userName as varchar(50);
Declare @defaultDataBaseName as varchar(50);
Declare @LoginCreationScript as varchar(max);
Declare @UserCreationScript as varchar(max);
Declare @TempUserCreationScript as varchar(max);
set @defaultDataBaseName = 'data1';
set @userName = 'domain\userName';
set @LoginCreationScript ='CREATE LOGIN [{userName}]
FROM WINDOWS
WITH DEFAULT_DATABASE ={dataBaseName}'
set @UserCreationScript ='
USE {dataBaseName}
CREATE User [{userName}] for LOGIN [{userName}];
EXEC sp_addrolemember ''db_datareader'', ''{userName}'';
EXEC sp_addrolemember ''db_datawriter'', ''{userName}'';
Grant Execute on Schema :: dbo TO [{userName}];'
/*Login creation*/
set @LoginCreationScript=Replace(Replace(@LoginCreationScript, '{userName}', @userName), '{dataBaseName}', @defaultDataBaseName)
set @UserCreationScript =Replace(@UserCreationScript, '{userName}', @userName)
Execute(@LoginCreationScript)
/*User creation and role assignment*/
set @TempUserCreationScript =Replace(@UserCreationScript, '{dataBaseName}', @defaultDataBaseName)
Execute(@TempUserCreationScript)
set @TempUserCreationScript =Replace(@UserCreationScript, '{dataBaseName}', 'db2')
Execute(@TempUserCreationScript)
set @TempUserCreationScript =Replace(@UserCreationScript, '{dataBaseName}', 'db3')
Execute(@TempUserCreationScript)
以下を使用できます。
CREATE LOGIN <login name> WITH PASSWORD = '<password>' ; GO
ログインを作成するには(詳細については、こちらを参照してください)。
次に、以下を使用する必要がある場合があります。
CREATE USER user_name
特定のデータベースのログインに関連付けられたユーザーを作成するには、それらのユーザーにもアクセスを許可します。
(詳細はこちら)
次のものも使用できます。
GRANT permission [ ,...n ] ON SCHEMA :: schema_name
ユーザーに割り当てたスキーマの権限を設定するため。
(詳細はこちら)
役立つと思われる他の2つのコマンドは、ALTER USERとALTER LOGINです。
CREATE LOGIN AdminLOGIN WITH PASSWORD = 'pass'
GO
Use MyDatabase;
GO
IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'AdminLOGIN')
BEGIN
CREATE USER [AdminLOGIN] FOR LOGIN [AdminLOGIN]
EXEC sp_addrolemember N'db_owner', N'AdminLOGIN'
EXEC master..sp_addsrvrolemember @loginame = N'adminlogin', @rolename = N'sysadmin'
END;
GO
これは完全にあなたがネットワークを使用してあなたを助けます:
1- Right-click on SQL Server instance at root of Object Explorer, click on Properties
Select Security from the left pane.
2- Select the SQL Server and Windows Authentication mode radio button, and click OK.
3- Right-click on the SQL Server instance, select Restart (alternatively, open up Services and restart the SQL Server service).
4- Close sql server application and reopen it
5- open 'SQL Server Configuration Manager' and tcp enabled for network
6-Double-click the TCP/IP protocol, go to the IP Addresses tab and scroll down to the IPAll section.
7-Specify the 1433 in the TCP Port field (or another port if 1433 is used by another MSSQL Server) and press the OK
8-Open in Sql Server: Security And Login And Right Click on Login Name And Select Peroperties And Select Server Roles And
Checked The Sysadmin And Bulkadmin then Ok.
9-firewall: Open cmd as administrator and type:
netsh firewall set portopening protocol = TCP port = 1433 name = SQLPort mode = ENABLE scope = SUBNET profile = CURRENT
先週、開発ボックスにMicrosoft SQL Server 2014 Developer Editionをインストールしたところ、今までに見たことのない問題にすぐに遭遇しました。
SQL Serverのさまざまなバージョンを何度もインストールしてきましたが、通常は簡単な手順です。サーバーをインストールし、管理コンソールを実行します。とても簡単です。しかし、このインストールを完了した後、SSMSを使用してサーバーにログインしようとすると、次のようなエラーが発生しました。
SQL Serverログインエラー18456「ユーザーのログインに失敗しました...(Microsoft SQL Server、エラー:18456)」ログイン時に間違ったパスワードを入力すると、このエラーが表示されることがありましたが、これは混合モードを使用している場合のみです( WindowsおよびSQL認証)。この場合、サーバーはWindows認証のみでセットアップされ、ユーザーアカウントは自分のものでした。セットアップ中にユーザーがSYSADMINロールに追加されなかった理由はまだわかりません。たぶん、ステップを逃してしまい、追加するのを忘れていました。とにかく、すべての希望が失われたわけではありません。
これを修正する方法は、SQL Serverに他のアカウントでログオンできない場合、コマンドラインインターフェイスを介してネットワークログインを追加することです。これを機能させるには、ログオンしているPCのWindowsの管理者である必要があります。
MSSQLサービスを停止します。[管理者として実行]を使用してコマンドプロンプトを開きます。SQL Server EXEファイルを保持するフォルダーに移動します。SQL Server 2014のデフォルトは「C:\ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Binn」です。次のコマンドを実行します:「sqlservr.exe –m」。これにより、SQL Serverがシングルユーザーモードで起動します。このコマンドプロンプトを開いたまま、別のコマンドプロンプトを開き、手順2と3を繰り返します。2番目のコマンドプロンプトウィンドウで、「SQLCMD –S Server_Name \ Instance_Name」を実行します。このウィンドウで、次の行を実行し、それぞれの後にEnterキーを押します。1
CREATE LOGIN [domainName \ loginName] FROM WINDOWS 2 GO 3 SP_ADDSRVROLEMEMBER 'LOGIN_NAME'、 'SYSADMIN' 4 GO CTRL + Cを使用して、コマンドプロンプトウィンドウで両方のプロセスを終了します。Yを押してSQL Serverプロセスを終了するように求められます。
MSSQLサービスを再起動します。それでおしまい!これで、ネットワークログインを使用してログインできるようになります。