2

作成した新しいDBを使用してSQLServer2012ExpressをインストールしていますBRD。また、データベースにテストテーブル(tempDemo)とテストストアドプロシージャ(getStList)を作成しました。BRDストアドプロシージャはクエリウィンドウで実行すると機能するので、テーブルとストアドプロシージャは正当であると思います。SQLServerは「SQLServerおよびWindows認証モード」に設定されています。

次に、次の接続文字列を使用してSQLServerに接続するクラシックASPページを作成しようとしました。

objConn.ConnectionString="Provider=SQLOLEDB;Server=XPSI7\SQLEXPRESS;Database=BRD;Integrated Security=SSPI;"

これは次のメッセージで失敗します。

「MicrosoftOLEDBProvider forSQLServerエラー'80004005'ログインによって要求されたデータベース"BRD"を開くことができません。ログインに失敗しました。」

データベースをASPページのMASTER代わりに変更しBRDても、エラーは発生しません。接続文字列を開いてから閉じることでテストしていますが、機能しているようです。

オブジェクトエクスプローラーのセキュリティ設定をMASTER確認しBRDましたが、違いに気づきませんでした。フォルダについても調べましたIIS_IUSRSが、違いはありません。とにかくこれが必要かどうかはわかりません。

4

2 に答える 2

4

SQL Serverは、サーバーレベルでログインを認証します。次に、接続を要求したデータベースを開こうとします。この時点で、データベースレベルのユーザーをサーバーレベルのログインにマップするか、データベースを使用するのに十分な権限を持つサーバーレベルのログインを使用する必要があります。

SQL Server認証を使用してこれを実証する簡単な(ただし安全ではない)方法:

USE master;
GO
CREATE LOGIN foo
  WITH PASSWORD = 'bar', CHECK_POLICY = OFF;
GO
USE BRD;
GO
CREATE USER foo FROM LOGIN foo;
GO
EXEC sp_addrolemember N'db_owner', N'foo';
GO

ASP接続文字列で、次を使用します。

objConn.ConnectionString = "Provider = SQLNCLI; Data Source = XPSI7 \ SQLEXPRESS; Initial Catalog = BRD; User ID = foo; Password = bar;"

使用しているログインをデータベースユーザーにマッピングすることもできます。

USE BRD;
GO
CREATE USER [YourDomain\IIS_IUSRwhatever] 
  FROM LOGIN [YourDomain\IIS_IUSRwhatever];
GO

これにより、データベースへのアクセスが許可されますが、付与するアクセス許可を決定するのはあなた次第です。これは、Webサーバーへの匿名アクセスを許可していることを前提としています。IISがチャレンジングでWindows認証を受け入れる場合は、資格情報を送信するユーザーに対して上記を実行する必要があります。どちらの場合でも、現在使用している接続文字列を引き続き使用できるはずです。

于 2012-06-10T23:05:25.747 に答える
0

次の接続文字列を試してください。

strConnection = "Provider=SQLNCLI10;Server=server_name;Database=" & BD_REMOTE_INITIAL_CATALOG & ";Uid=" & BD_REMOTE_USER_ID & "; Pwd=*****;"
于 2012-06-11T17:55:07.650 に答える