web-dev-qa-db-ja.com

SQL Serverユーザーにアクセスを許可するにはどうすればよいですか?

私は開発者がplay-adminを試していますが、SQLサーバーユーザー( "op_web")を使用して、開発マシンからリモートSQLサーバーに接続したいと考えています。

Vs2008サーバーエクスプローラーから接続しようとすると、サーバーに接続できますが、データベースが表示されません。サーバー管理者ユーザーを使用して接続すると、すべてのデータベースが期待どおりに一覧表示されます。

サーバーは私が作成した比較的新しいインストールです。

私が持っています

  • sQLサーバーでのリモート接続が許可されます。

  • サーバーレベルでログインop_webを作成しました

  • データベースレベルでユーザーを作成し、同じ名前でログインするように割り当てました

  • 読み取りと書き込みを可能にするためにユーザーに役割を割り当てました-スキーマを割り当てていません。ユーザーのデフォルトのスキーマはdboです。

Sqlserver management studio/sqlserver認証と作成されたログインを使用して(サーバーでローカルに)ログオンすると、期待どおりにテーブルデータを表示および変更できます。

リモートアクセスでは、データベースを選択できません。

クライアントマシンのVisualStudioで、検出されたSQLサーバーとともにドロップダウンリストにリストされているサーバー名を取得します。前述のように、Windowsユーザー(管理者アカウント)を使用して接続できます。さらに、同じ否定的な結果で別の物理マシンから試しました。ファイアウォールの問題のような匂いはしませんが、念のためサーバーファイアウォールを無効にしようとしましたが、それでも修正されませんでした。私はすべてが機能する別のデータベースサーバーを持っており、すべての設定をユーザー間で複製しました(したがって、問題はユーザーではなくSQLサーバーインスタンスに関連しているようです)。

私が見逃したかもしれないものへのポインタはありますか?

(この質問は https://stackoverflow.com/questions/1386223/how-to-allow-access-for-a-sql-server-user で尋ねられました)

2
Anders Juul

SQL Serverの「ユーザー」には、2つの部分があります。

  1. サーバーログイン。サーバーレベルとして定義され、サーバーロールに関連付けられている場合があります(例:dbcreator:「dbcreator固定サーバーロールのメンバーは、任意のデータベースを作成、変更、削除、および復元できます」)。 Windowsユーザーをサーバーの役割にマップします(これの一部は自動的に行われますが、SQLServerのバージョンによって異なります1

  2. データベースユーザー。これらは、データベースの役割(たとえば、フルコントロールの場合は「dbo」(「データベースの所有者」)、データを読み取ることができる場合は「dbreader」)を指定して、データベースによって作成されます。作成時に、これらはサーバーログインに関連付けられます。

サーバーとデータベースの役割を定義して、特定のアクセス許可を与えることができます)。

詳細については、SQL Server Books Online(またはMSDN)を参照してください。

したがって、管理者アカウントを使用して、Windowsユーザーアカウントのサーバーログインを作成し、操作する必要のあるデータベースへのアクセスを許可する必要があります。物事(テーブル、ビュー、ストアドプロシージャなど)を定義する場合は、本当に「dbo」の役割、またはよりきめ細かい制御のためのかなりの作業が必要です。

アプリケーションに必要なアクセスのみを使用してアプリケーションをテストすることを忘れないでください(たとえば、ビューまたはテーブルを作成/ドロップ/変更するのはまれなアプリケーションです)。


1 SQL Server 2005では、ホストマシンのローカルAdministratorsグループは、「sysadmin」サーバーの役割を持つログインにマップされます。2008年には、セットアップでそのようにマップされるアカウントを指定します。

2
Richard

ネットワーク上で表示できるようにするには(リモート接続)、SQLServerインスタンスにTCP/IPなどのネットワークライブラリが構成されていることを確認する必要があります。これは、SQLServer構成マネージャーを使用して構成できます。変更が必要な場合は、SQLServerを再起動するまで変更は有効になりません。これで、名前付きインスタンスの場合は、SQLServerブラウザーサービスが実行されていることも確認する必要があります。これにより、名前付きインスタンスに関してそれを見つけようとするクライアントにTCPポートが提供されます。また、両方のサービスのファイアウォールに例外があることを確認する必要があります。

SQL Serverログインに関して、SQL Server Management Studioを使用してログインしようとすると、信頼できる接続/アカウントではないことを示すエラーが表示された場合、SQLServerはWindowsのみの認証を使用するように構成されています。 SQLServerベースのログインを使用して接続しないでください。あなたの場合、あなたはそれをあなたが望むものである混合モードに設定したことを示しました。ただし、変更を加えた後にSQL Serverを再起動しなかった場合は、それが問題である可能性があります。繰り返しますが、これは起動時にのみ実行される設定の1つです。

無視できるKerberosエラー。これは、ドメイン管理者またはコンピューターアカウント自体(Windows 2003でNeworkサービスとして実行している場合)のみがSPNを登録できるためです。したがって、他のものを使用している場合は、そのエラーが表示されます。その場合、SPNを手動で作成するのが最善ですが、Windows認証でのみ表示されるため、ここには入力しないでください。 Kerberosは、SQLServerベースのログインには影響しません。

SQL Serverユーザーに関して、SQL Server Management Studioを使用してローカルでSQLServerに接続できますか?

1
K. Brian Kelley

謝罪は順調です-問題は今解決されました:

サーバー全体を再インストールし、最初にSQLサーバーを追加しました。SSL経由で動作するVisualSVNが、SQLServerログインにも必要な安全な接続で大混乱を引き起こしているのではないかと疑っていました。

実際、問題はまだ存在していましたが、ファイアウォールを無効にしようとすると、当面の問題は実際に解決しました。

私は1433/TCPのためにファイアウォールに穴を開けました、そして物事は私がそれらを望むところにあります。

お時間をいただきありがとうございます...

0
Anders Juul