0

MSSQL データベースとそれにアクセスする「通常の」ユーザーがいます。sys.objects のようなテーブルを使おうとすると、パーミッション エラーになります。

select name from sys.objects
Msg 229, Level 14, State 5, Line 1
The SELECT permission was denied on the object 'objects', database 'mssqlsystemresource', schema 'sys'.

なんで?ドキュメントによると

SQL Server 2005 以降のバージョンでは、カタログ ビューでのメタデータの可視性は、ユーザーが所有しているか、ユーザーが何らかの権限を付与されているセキュリティ保護可能なものに制限されています。

だから、目に見えるオブジェクトだけをリストする場合でも、sys.objectsの使用を許可する必要があると思います...

私のユーザーはで作成されました

CREATE LOGIN [factoryFX20_K_user] WITH PASSWORD=N'...', DEFAULT_DATABASE=[ff20121025], DEFAULT_LANGUAGE=[English], CHECK_EXPIRATION=OFF, CHECK_POLICY=ON
EXEC sys.sp_addsrvrolemember @loginame = N'factoryFX20_K_user', @rolename = N'serveradmin'

USE [ff20121025]
CREATE USER [factoryFX20_K_user] FOR LOGIN [factoryFX20_K_user] WITH DEFAULT_SCHEMA=[factoryFX20_K_user]
4

1 に答える 1

1

問題は、オブジェクト 'sysobjects'、データベース 'mssqlsystemresource'、スキーマ 'sys' で SELECT 権限が拒否されました: 私のユーザーにはいくつかの "拒否" ロールがありました。

解決策は、ユーザーのこのロールを削除することでした:

USE [ff20121025]
EXEC sp_droprolemember N'db_denydatawriter', N'factoryFX20_K_user'
EXEC sp_droprolemember N'db_denydatareader', N'factoryFX20_K_user'

ありがとうジョン!

于 2012-10-26T09:36:59.077 に答える