SQL Server 2008 R2をローカルマシンにインストールしました。しかし、権利(または権利の欠如)のために新しいデータベースを作成することはできません。
「データベース権限の作成が拒否されました」
だから、現在のログインに管理者権限を割り当てようとしました
「ユーザーにはこのアクションを実行する権限がありません。」
また、管理者権限を持っているが運のない新しいログインを作成しようとしました。 データベースを作成できるように自分に管理者権限を付与するにはどうすればよいですか?再インストールできますが、したくないです。
はい-SQL Serverのインストール時にsysadminロールに自分を追加するのを忘れたようです。マシンのローカル管理者である場合、 このブログ投稿 を使用すると、SQLCMDを使用して、再インストールせずにアカウントをSQL Server sysadminグループに追加できます。あなたが私に尋ねると、それはSQL Serverのセキュリティホールのビットですが、この場合に役立ちます。
コマンドプロンプトウィンドウを開きます。 SQL Serverの既定のインスタンスが既に実行されている場合は、コマンドプロンプトで次のコマンドを実行して、SQL Serverサービスを停止します。
net stop mssqlserver
次に、SQLサーバーがインストールされているディレクトリに移動します。ディレクトリは、たとえば次のいずれかです。
C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn
C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn
MSSQLディレクトリとCD
をそのように把握します。
CD C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn
次のコマンドを実行して、SQL Serverをシングルユーザーモードで起動します。 SQLCMD
が指定されているため、(別のコマンドプロンプトウィンドウから)SQLCMD
接続を1つだけ作成できます。
sqlservr -m"SQLCMD"
次に、上記のシングルユーザーモードでSQL Serverを起動したユーザーと同じユーザーとして別のコマンドプロンプトウィンドウを開き、次のコマンドを実行します。
sqlcmd
Enterキーを押します。これで、シングルユーザーモードで実行されているSQL Serverインスタンスに対してSQLステートメントを実行できます。
create login [<<DOMAIN\USERNAME>>] from windows;
-- For older versions of SQL Server:
EXEC sys.sp_addsrvrolemember @loginame = N'<<DOMAIN\USERNAME>>', @rolename = N'sysadmin';
-- For newer versions of SQL Server:
ALTER SERVER ROLE [sysadmin] ADD MEMBER [<<DOMAIN\USERNAME>>];
GO
ソース 。
更新ALTER SERVER ROLE [sysadmin] ADD MEMBER [<<DOMAIN\USERNAME>>];
の後にセミコロンを忘れないでください。また、GO
の後に余分なセミコロンを追加しないでください。そうしないと、コマンドが実行されません。
私はシステム管理者ではなく、マシンの管理者であるSQL 2012データベースを採用しました。 「管理者として実行」でSSMSを使用し、NTアカウントをSQLログインとして追加し、サーバーロールをsysadminに設定しました。問題ない。
これを修正できると主張するスクリプトを次に示します。
この単純なスクリプトを使用して、ローカルSQL Server Expressの管理者権限を取得します
説明
このコマンドスクリプトを使用すると、ローカルSQL Serverインスタンスのsysadminロールに自分を簡単に追加できます。 WindowsローカルAdministratorsグループのメンバーであるか、ユーザーの資格情報にアクセスできる必要があります。このスクリプトは、SQL Server 2005以降をサポートしています。
このスクリプトは、他の人がインストールしたSQL Server 2008 Expressを使用する開発者である場合に最も役立ちます。この状況では、通常、SQL Server 2008 Expressインスタンスに対する管理者権限はありません。これは、デフォルトでは、SQL Server 2008をインストールする人にのみ管理者権限が付与されるためです。
SQL Server 2008 Expressをインストールしたユーザーは、SQL Server Management Studioを使用して必要な特権を付与できます。しかし、SQL Server Management Studioがインストールされていない場合はどうでしょうか?または、インストールしているユーザーがもう利用できない場合はさらに悪いですか?
このスクリプトは、数回クリックするだけで問題を修正します!
注:BATファイルに「インスタンス名」を指定する必要があります(「MSSQLSERVER」になる可能性がありますが、そうでない場合があります)。まず、「Microsoft SQL Server管理コンソール」で次のコマンドを実行して、 」:
SELECT @@servicename
次に、BATファイルが「SQLインスタンス名」の入力を求めるときに使用する結果をコピーします。
@echo off
rem
rem ****************************************************************************
rem
rem Copyright (c) Microsoft Corporation. All rights reserved.
rem This code is licensed under the Microsoft Public License.
rem THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
rem ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
rem IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
rem PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
rem
rem ****************************************************************************
rem
rem CMD script to add a user to the SQL Server sysadmin role
rem
rem Input: %1 specifies the instance name to be modified. Defaults to SQLEXPRESS.
rem %2 specifies the principal identity to be added (in the form "<domain>\<user>").
rem If omitted, the script will request elevation and add the current user (pre-elevation) to the sysadmin role.
rem If provided explicitly, the script is assumed to be running elevated already.
rem
rem Method: 1) restart the SQL service with the '-m' option, which allows a single connection from a box admin
rem (the box admin is temporarily added to the sysadmin role with this start option)
rem 2) connect to the SQL instance and add the user to the sysadmin role
rem 3) restart the SQL service for normal connections
rem
rem Output: Messages indicating success/failure.
rem Note that if elevation is done by this script, a new command process window is created: the output of this
rem window is not directly accessible to the caller.
rem
rem
setlocal
set sqlresult=N/A
if .%1 == . (set /P sqlinstance=Enter SQL instance name, or default to SQLEXPRESS: ) else (set sqlinstance=%1)
if .%sqlinstance% == . (set sqlinstance=SQLEXPRESS)
if /I %sqlinstance% == MSSQLSERVER (set sqlservice=MSSQLSERVER) else (set sqlservice=MSSQL$%sqlinstance%)
if .%2 == . (set sqllogin="%USERDOMAIN%\%USERNAME%") else (set sqllogin=%2)
rem remove enclosing quotes
for %%i in (%sqllogin%) do set sqllogin=%%~i
@echo Adding '%sqllogin%' to the 'sysadmin' role on SQL Server instance '%sqlinstance%'.
@echo Verify the '%sqlservice%' service exists ...
set srvstate=0
for /F "usebackq tokens=1,3" %%i in (`sc query %sqlservice%`) do if .%%i == .STATE set srvstate=%%j
if .%srvstate% == .0 goto existerror
rem
rem elevate if <domain/user> was defaulted
rem
if NOT .%2 == . goto continue
echo new ActiveXObject("Shell.Application").ShellExecute("cmd.exe", "/D /Q /C pushd \""+WScript.Arguments(0)+"\" & \""+WScript.Arguments(1)+"\" %sqlinstance% \""+WScript.Arguments(2)+"\"", "", "runas"); >"%TEMP%\addsysadmin{7FC2CAE2-2E9E-47a0-ADE5-C43582022EA8}.js"
call "%TEMP%\addsysadmin{7FC2CAE2-2E9E-47a0-ADE5-C43582022EA8}.js" "%cd%" %0 "%sqllogin%"
del "%TEMP%\addsysadmin{7FC2CAE2-2E9E-47a0-ADE5-C43582022EA8}.js"
goto :EOF
:continue
rem
rem determine if the SQL service is running
rem
set srvstarted=0
set srvstate=0
for /F "usebackq tokens=1,3" %%i in (`sc query %sqlservice%`) do if .%%i == .STATE set srvstate=%%j
if .%srvstate% == .0 goto queryerror
rem
rem if required, stop the SQL service
rem
if .%srvstate% == .1 goto startm
set srvstarted=1
@echo Stop the '%sqlservice%' service ...
net stop %sqlservice%
if errorlevel 1 goto stoperror
:startm
rem
rem start the SQL service with the '-m' option (single admin connection) and wait until its STATE is '4' (STARTED)
rem also use trace flags as follows:
rem 3659 - log all errors to errorlog
rem 4010 - enable shared memory only (lpc:)
rem 4022 - do not start autoprocs
rem
@echo Start the '%sqlservice%' service in maintenance mode ...
sc start %sqlservice% -m -T3659 -T4010 -T4022 >nul
if errorlevel 1 goto startmerror
:checkstate1
set srvstate=0
for /F "usebackq tokens=1,3" %%i in (`sc query %sqlservice%`) do if .%%i == .STATE set srvstate=%%j
if .%srvstate% == .0 goto queryerror
if .%srvstate% == .1 goto startmerror
if NOT .%srvstate% == .4 goto checkstate1
rem
rem add the specified user to the sysadmin role
rem access tempdb to avoid a misleading shutdown error
rem
@echo Add '%sqllogin%' to the 'sysadmin' role ...
for /F "usebackq tokens=1,3" %%i in (`sqlcmd -S np:\\.\pipe\SQLLocal\%sqlinstance% -E -Q "create table #foo (bar int); declare @rc int; execute @rc = sp_addsrvrolemember '$(sqllogin)', 'sysadmin'; print 'RETURN_CODE : '+CAST(@rc as char)"`) do if .%%i == .RETURN_CODE set sqlresult=%%j
rem
rem stop the SQL service
rem
@echo Stop the '%sqlservice%' service ...
net stop %sqlservice%
if errorlevel 1 goto stoperror
if .%srvstarted% == .0 goto exit
rem
rem start the SQL service for normal connections
rem
net start %sqlservice%
if errorlevel 1 goto starterror
goto exit
rem
rem handle unexpected errors
rem
:existerror
sc query %sqlservice%
@echo '%sqlservice%' service is invalid
goto exit
:queryerror
@echo 'sc query %sqlservice%' failed
goto exit
:stoperror
@echo 'net stop %sqlservice%' failed
goto exit
:startmerror
@echo 'sc start %sqlservice% -m' failed
goto exit
:starterror
@echo 'net start %sqlservice%' failed
goto exit
:exit
if .%sqlresult% == .0 (@echo '%sqllogin%' was successfully added to the 'sysadmin' role.) else (@echo '%sqllogin%' was NOT added to the 'sysadmin' role: SQL return code is %sqlresult%.)
endlocal
pause
Microsoftには、この問題に関する記事があります。順を追って説明します。
要するに、他のすべての答えが示唆するように、-m
を使用してsqlserverのインスタンスを起動する必要があります。ただし、Microsoftでは、もう少し詳細な手順を提供しています。
[スタート]ページから、SQL Server Management Studioを起動します。 [表示]メニューで、[登録済みサーバー]を選択します。 (サーバーがまだ登録されていない場合は、[ローカルサーバーグループ]を右クリックし、[タスク]をポイントして、[ローカルサーバーの登録]をクリックします。)
[登録済みサーバー]領域で、サーバーを右クリックし、[SQL Server構成マネージャー]をクリックします。これにより、管理者として実行する許可が求められ、Configuration Managerプログラムが開きます。
Management Studioを閉じます。
SQL Server構成マネージャーの左側のウィンドウで、[SQL Serverサービス]を選択します。右側のペインで、SQL Serverのインスタンスを見つけます。 (SQL Serverの既定のインスタンスには、コンピューター名の後に(MSSQLSERVER)が含まれます。名前付きインスタンスは、登録済みサーバーと同じ名前で大文字で表示されます。)SQL Serverのインスタンスを右クリックし、[プロパティ]をクリックします。
[スタートアップパラメータ]タブの[スタートアップパラメータの指定]ボックスに-mと入力し、[追加]をクリックします。 (これはダッシュで、小文字のmです。)
注意
SQL Serverの以前のバージョンには、[スタートアップパラメータ]タブがありません。その場合、[詳細設定]タブで、[スタートアップパラメーター]をダブルクリックします。パラメータは非常に小さなウィンドウで開きます。既存のパラメーターを変更しないように注意してください。最後に、新しいパラメーター; -mを追加し、[OK]をクリックします。 (つまり、セミコロン、ダッシュ、小文字のmです。)
[OK]をクリックし、再起動するメッセージの後に、サーバー名を右クリックして、[再起動]をクリックします。
SQL Serverの再起動後、サーバーはシングルユーザーモードになります。 SQL Serverエージェントが実行されていないことを確認してください。開始された場合、唯一の接続が必要になります。
Windows 8の開始画面で、Management Studioのアイコンを右クリックします。画面の下部で、[管理者として実行]を選択します。 (これにより、管理者の資格情報がSSMSに渡されます。)
注意
Windowsの以前のバージョンでは、[管理者として実行]オプションがサブメニューとして表示されます。
一部の構成では、SSMSは複数の接続を試行します。 SQL Serverはシングルユーザーモードであるため、複数の接続は失敗します。実行する次のアクションのいずれかを選択できます。次のいずれかを実行します。
a)Windows認証(管理者の資格情報を含む)を使用してオブジェクトエクスプローラーに接続します。 [セキュリティ]、[ログイン]の順に展開し、独自のログインをダブルクリックします。 [サーバーの役割]ページで[sysadmin]を選択し、[OK]をクリックします。
b)オブジェクトエクスプローラーに接続する代わりに、Windows認証(管理者の資格情報を含む)を使用してクエリウィンドウに接続します。 (この方法で接続できるのは、オブジェクトエクスプローラーで接続しなかった場合のみです。)次のようなコードを実行して、sysadmin固定サーバーロールのメンバーである新しいWindows認証ログインを追加します。次の例では、CONTOSO\PatKという名前のドメインユーザーを追加します。
CREATE LOGIN [CONTOSO\PatK] FROM WINDOWS; ALTER SERVER ROLE sysadmin ADD MEMBER [CONTOSO\PatK];
c)SQL Serverが混合認証モードで実行されている場合は、Windows認証(管理者の資格情報を含む)を使用してクエリウィンドウに接続します。次のようなコードを実行して、sysadmin固定サーバーロールのメンバーである新しいSQL Server認証ログインを作成します。
CREATE LOGIN TempLogin WITH PASSWORD = '************'; ALTER SERVER ROLE sysadmin ADD MEMBER TempLogin;
警告:
************を強力なパスワードに置き換えます。
d)SQL Serverが混合認証モードで実行されており、saアカウントのパスワードをリセットする場合は、Windows認証(管理者の資格情報を含む)を使用してクエリウィンドウに接続します。次の構文でsaアカウントのパスワードを変更します。
ALTER LOGIN sa WITH PASSWORD = '************'; Warning
************を強力なパスワードに置き換えます。
次の手順により、SQL Serverがマルチユーザーモードに戻ります。 SSMSを閉じます。
SQL Server構成マネージャーの左側のウィンドウで、[SQL Serverサービス]を選択します。右ペインで、SQL Serverのインスタンスを右クリックし、[プロパティ]をクリックします。
[スタートアップパラメータ]タブの[既存のパラメータ]ボックスで、-mを選択し、[削除]をクリックします。
注意
SQL Serverの以前のバージョンには、[スタートアップパラメータ]タブがありません。その場合、[詳細設定]タブで、[スタートアップパラメーター]をダブルクリックします。パラメータは非常に小さなウィンドウで開きます。先に追加した; -mを削除し、[OK]をクリックします。
サーバー名を右クリックし、[再起動]をクリックします。
これで、sysadmin固定サーバーロールのメンバーであるアカウントの1つに通常接続できるようになります。
実際には、-mをSql Server Configuration Managerの起動パラメーターに追加し、サービスを再起動し、ssmsに移動してアカウントのsysadminチェックボックスを追加し、-m restartを削除して通常どおり使用します。
-mシングルユーザーモードでSQL Serverのインスタンスを起動します。