3

Windows7でSQL-ServerのODBCデータソース接続を作成する際に問題が発生しました。

問題の概要:ODBCデータソース接続は、「マスター」データベースに対してのみ作成でき、追加の任意のデータベースに対しては作成できません。

私はネットをグーグルで検索しましたが、解決策が見つかりませんでした。詳細は次のとおりです。

  1. Windows764ビットシステムにMSSQLServerをインストールしています。詳細:SQLEXPRESSエディション、バージョン:10.1.2531.0、ビルド:2007.100.2531.0、インスタンスID:MSSQL10.SQLEXPRESS。

「SQLServerConfigurationManager」を使用すると、次のようになります。

実行中のSQLServer(SQLEXPRESS)
また、「ログオン:組み込みアカウント->ローカルシステム」も設定しました。

  1. 「MicrosoftSQLServerManagement Studio」(バージョン10.0.1600.22)を使用して、ユーザー名とパスワードを空白にしてデータベースに接続しました。次に、「Test1」という新しいデータベースを作成し、作成したファイルを「F:\ Data \ SQLServer\Test1.sdf」に配置するように指示しました。いくつかの(簡単な)テーブルの作成を続け、数行を入力し、いくつかのクエリを正常に実行しました。すべて「Microsoft SQLServerManagementStudio」を使用しました。ここまでは順調ですね。

  2. ただし、ODBC接続を使用して、外部プログラムからデータベースに接続する必要があります。したがって、「ODBCデータソースアドミニストレータ」(\%sysdir%\ SysWOW64 \ odbcad32.exeバージョン6.1.7600.16385)(64ビット)を使用して、データソースインターフェイスを作成しようとしています。これが私の経験です:(私はdsn: "SYS_DB"と呼んでいます):

3a。「システムDNS」->「追加」->「SQLNativeClient10.0」に移動する場合。(ドライバー用); サーバー:PLUTO \ SQLEXPRESS; "統合Windows認証付き"; (他のすべてのオプション:デフォルト)、「データソースのテスト」を押すと、次のように表示されます。

......アドレスPLUTO\SQLEXPRESS'を使用して接続を確立しました。
...テストが正常に完了しました!
(PLUTOはコンピューター名です)。

3b。問題は、デフォルトの「マスター」データベースではなく、「Test1」データベースに接続する必要があることです。

したがって、[ODBCデータソースアドミニストレータ]ウィンドウの3番目のウィンドウで、次の手順を実行すると、次のようになります。->デフォルトのデータベースをTest1に変更すると、次のようなウィンドウが表示されます。

入力されたデータベースは無効です
1つのウィンドウに戻って、[SQL Serverに接続して追加の構成オプションの設定を取得する]のチェックを外し、[データベースファイル名の添付]:F:\ Data \ SQL Server \ Test1.sdf(Iのように)をチェックします。上記の2.で述べたように、データソーステストは次の場合に失敗します。
接続を試みています
[Microsoft][SQLServerネイティブクライアント10.0][SQLServer]
ファイル'F:\ Data \ SQL Server \ Test1.sdf'のヘッダーは、有効なデータベースファイルヘッダーではありません。
FILESIZEプロパティが正しくありません。
3c。ドライバを設定しようとする場合:「システムDNS」->「追加」->「SQLServer」; (上記の3aのような「SQLNative Client 10.0」の代わりに)動作は同じです。デフォルトの「マスター」データベースに接続すると成功し、「Test1」データベースに接続しようとすると失敗し、同じエラーメッセージが表示されます。 3bで。その上。

  1. 注:「SQLcmd-L」に移動すると、次のように表示されます。
    サーバー:
    冥王星
    PLUTO \ SQLEXPRESS
    私はネット全体をグーグルで検索しましたが、解決策が見つかりませんでした。あなたの助けをいただければ幸いです。

多くのTIA-ヘレン

詳細情報(3-16):私が行くとき:

> sqlcmd -S pluto \ sqlexpress -Q "select getdate()"
2013-03-16 10:07:04.380(1行が影響を受ける)
したがって、デフォルト(「マスター」)データベースとの接続は正常に機能します。

しかし、私が行くとき:

>sqlcmd -S pluto\sqlexpress -d Test1 -Q "select getdate()"
Msg 4060, Level 11, State 1, Server PLUTO\SQLEXPRESS, Line 1
Cannot open database "Test1" requested by the login. The login failed.
Msg 18456, Level 14, State 1, Server PLUTO\SQLEXPRESS, Line 1
Login failed for user 'PLUTO\MyUser'.

したがって、問題は、そのサーバー上の新しいデータベース、つまり「Test1」へのユーザー権限/アクセス権にあるようです。

SQL Server上の特定のデータベースへのアクセス許可を検査/割り当てる方法を誰かが手伝ってもらえますか?

多くのTIA

ヘレン

4

2 に答える 2

3

あなたは許可の問題で実行していますこれが役立つことを願っています。

sp_addlinkedsrvlogin

Microsoft®SQLServer™のローカルインスタンスでのログインとリンクサーバーでのリモートログインの間のマッピングを作成または更新します。構文

sp_addlinkedsrvlogin [@rmtsrvname =]'rmtsrvname' [、[@useself =]'useself'] [、[@locallogin =]'locallogin'] [、[@rmtuser =]'rmtuser'] [、[@rmtpassword =] ' rmtpassword']引数

[@rmtsrvname =]'rmtsrvname'

ログインマッピングが適用されるリンクサーバーの名前です。rmtsrvnamesysnameであり、デフォルトはありません。

[@useself =]'useself'

リモートサーバーへの接続に使用されるログインの名前を決定します。useselfはvarchar(8)で、デフォルトはTRUEです。値trueは、SQL Server認証済みログインが独自の資格情報を使用してrmtsrvnameに接続し、rmtuser引数とrmtpassword引数が無視されることを指定します。falseは、 rmtuser引数とrmtpassword引数を使用して、指定されたlocalloginのrmtsrvnameに接続することを指定します。rmtuserおよびrmtpasswordの場合また、NULLに設定されているため、リンクサーバーへの接続にログインやパスワードは使用されません。MicrosoftWindowsNT®環境がセキュリティアカウントの委任をサポートし、プロバイダーがWindows認証をサポートしていない限り、useselfのtrueはWindows NT認証ログインには無効です(この場合、trueの値でマッピングを作成する必要はありませんが、引き続き有効です)。

[@locallogin =]'locallogin'

ローカルサーバーへのログインです。localloginsysnameで、デフォルトはNULLです。NULLは、このエントリがrmtsrvnameに接続するすべてのローカルログインに適用されることを指定します。NULLでない場合、localloginはSQLServerログインまたはWindowsNTユーザーになります。Windows NTユーザーには、SQL Serverへのアクセスが直接許可されているか、アクセスが許可されているWindowsNTグループのメンバーシップを通じて許可されている必要があります。

[@rmtuser =]'rmtuser'

useselfがfalseの場合にrmtsrvname接続するために使用されるユーザー名です。rmtusersysnameであり、デフォルトはNULLです。

[@rmtpassword =]'rmtpassword'

rmtuserに関連付けられているパスワードです。rmtpasswordsysnameで、デフォルトはNULLです。戻りコード値

0 (success) or 1 (failure)

備考

ユーザーがローカルサーバーにログオンし、リンクサーバー上のテーブルにアクセスする分散クエリを実行する場合、ローカルサーバーは、そのテーブルにアクセスするために、ユーザーに代わってリンクサーバーにログオンする必要があります。sp_addlinkedsrvloginを使用して、ローカルサーバーがリンクサーバーへのログオンに使用するログイン資格情報を指定します。

ローカルサーバー上のすべてのログインとリンクサーバー上のリモートログインの間のデフォルトのマッピングは、sp_addlinkedserverを実行することによって自動的に作成されます。デフォルトのマッピングでは、SQL Serverは、ログインに代わってリンクサーバーに接続するときにローカルログインのユーザー資格情報を使用します(リンクサーバーに対して@useselfをtrueに設定してsp_addlinkedsrvloginを実行するのと同じです)。sp_addlinkedsrvloginは、デフォルトのマッピングを変更する場合、または特定のローカルログインの新しいマッピングを追加する場合にのみ使用してください。デフォルトのマッピングまたはその他のマッピングを削除するには、sp_droplinkedsrvloginを使用します。

SQL Serverは、 sp_addlinkedsrvloginを使用して所定のログインマッピングを作成するのではなく、クエリを発行するユーザーのWindows NTセキュリティクレデンシャル(Windows NTユーザー名とパスワード)を使用して、次のすべての条件が存在する場合にリンクサーバーに接続できます。

  • ユーザーは、Windows認証モードを使用してSQLServerに接続します。
  • セキュリティアカウントの委任は、クライアントと送信サーバーで利用できます。
  • プロバイダーは、Windows認証モード(たとえば、WindowsNTで実行されているSQLServer)をサポートしています。

ローカルSQLServerでsp_addlinkedsrvloginを実行して定義されたマッピングを使用して、リンクサーバーによって認証が実行された後、リモートデータベース内の個々のオブジェクトに対するアクセス許可は、ローカルサーバーではなくリンクサーバーによって決定されます。

sp_addlinkedsrvloginは、ユーザー定義のトランザクション内から実行することはできません。権限

sp_addlinkedsrvloginを実行できるのは、 sysadminおよびsecurityadmin固定サーバーロールのメンバーのみです。

トラブルシューティング

ソース

于 2013-03-16T17:18:24.040 に答える
1

「Test1」データベースが「コンパクト」インスタンスにあったことがわかります。(私のOPに「sdf」データベースファイル拡張子が表示されていることに気付いたかもしれません)。

したがって、これがODBC接続がそれを認識しなかった理由です。(SQL Server CompactエディションにはODBCパイプがありません)。

于 2013-03-17T15:17:08.653 に答える