3

SQLServerデータベースの互換性レベルを判断するための次のコードがあります。

Microsoft.SqlServer.Management.Smo.Server server = new Server(myServerName);
if (!server.Databases.Contains(database)) 
  { throw new ArgumentException("Specified database ('" + myDBName+ "') not found on '" + myServerName + "'"); }

string connstr = string.Format("Data Source={0};" +
   "Persist Security Info=False;" +
   "User ID={1};" +
   "Password={2};Enlist=False;", myServerName, username, password);
server.ConnectionContext.ConnectionString = connstr;

Microsoft.SqlServer.Management.Smo.Database db = server.Databases[myDBName];
DataSet ds = db.ExecuteWithResults(@"select compatibility_level 
           from sys.databases where name=db_name()");

私には2人のユーザーがいて、そのうちの1人はこのコードを実行して、適切な値を取り戻すことができます。別のユーザーがこのコードを実行して、まったく同じ資格情報を使用して同じサーバー/データベースに接続し、返されたDataSetに行が含まれていません。

同じクエリに対して1人が結果を返さない原因となる、2人のユーザーの違いは何でしょうか。データベースの互換性を取得するためのより良い方法はありますか?

ちなみに、このコードはSQLServer2005から2012で実行/動作します。

編集: myServerName、myDBName、username、およびpasswordは常に同じであることに注意してください。唯一の違いは、コードを実行している2人の異なるWindowsユーザーです。

4

1 に答える 1

0

結果を返すユーザーには、ログインに VIEW_ANY_DEFINITON 権限が付与されていると思われます。この権限を他のユーザーに付与すると、結果が返されます。

于 2012-10-09T16:08:54.700 に答える