7

SQL2000からSQL2008に移行したばかりで、sp_OACreateを使用するストアドプロシージャで実行権限の問題が発生し始めました。

システムの残りの部分は、セットアップされてデータベースに追加されたdbログインで正常に動作します。

私はもう試した:

USE master
GO
GRANT EXEC ON sp_OACreate TO [dbuser]
GO

しかし、これは次のエラーで失敗します。

メッセージ15151、レベル16、状態1、行1ユーザー'dbuser'が存在しないか、権限がないため、ユーザー'dbuser'が見つかりません。

私は完全な権限でsaとしてサーバーにログインしています。同様のSQLステートメントを実行して、サーバーの役割にアクセス許可を適用できますが、ログイン/ユーザーは適用できません。

特定のユーザー/ログインに変更を適用するにはどうすればよいですか?

パブリックロールに権限を適用すると、問題が解決します。ただし、これはセキュリティの問題のようで、ライブサーバーには適用したくありません。

4

5 に答える 5

6

Johnの回答から先に進んで、Masterデータベースのユーザーリストを確認しましたが、ユーザーはそこにいませんでした。それが削除されたのか、それとも失われたのか、私にはわかりません。dbsを新しいサーバーインスタンスに移行したときに、何かがおかしくなった可能性があります。

ともかく; ユーザーを再作成して特定のログインに関連付けることで、マスターデータベースで次のステートメントを実行して、ストアドプロシージャを実行できるようになりました。

USE MASTER
GO

GRANT EXECUTE ON [sys].[sp_OADestroy] TO [dbuser]
GO
GRANT EXECUTE ON [sys].[sp_OACreate] TO [dbuser]
GO
GRANT EXECUTE ON [sys].[sp_OAMethod] TO [dbuser]
GO
GRANT EXECUTE ON [sys].[sp_OASetProperty] TO [dbuser]
GO

すべてのヘルプとポインタをありがとう。これが将来他の人々に役立つことを願っています。

于 2010-06-15T10:43:09.223 に答える
6

このエラーは、ユーザー「dbuser」が master データベースに存在しないことを示しています。

ユーザーが master データベース内に存在すると仮定しますか?

次のT-SQLを使用して確認できます

USE MASTER;
GO

SELECT *
FROM sys.sysusers
WHERE name = 'dbuser'

ユーザーが存在しないことが判明した場合は、CREATE USERステートメントを使用して、「dbuser」というユーザーを作成します。同じ名前のログインが存在する場合、ユーザーは自動的に同じ名前のログインにマップされます。

于 2010-06-15T10:10:32.530 に答える
2

(現在のユーザー)がsp_OACreateなどに対するEXECUTE権限を持っていることを確認するために使用しているコードを次に示します。

use master;
select state_desc,name from
sys.database_permissions a
left join
sys.all_objects b
on a.major_id = b.object_id
where name like 'sp_OA%';

@John Sansom と @WestDiscGolf が指摘したように、ユーザーはマスター データベースに存在する必要があり、マスター データベースで実行権限を付与するuse Master必要があるため、必須です。上記のクエリは、ユーザーが実行権限を持っている場合はレコードを返し、持っていない場合は空のセットを返します。(ユーザー データベースで実行すると、空のセットも返されます。)

を使用してこれらのアクセス許可を確認する方法がわかりませんでしたfn_my_permissions。これは、おそらくこのようなジョブに適したツールです。

于 2011-11-30T15:49:37.737 に答える
2

問題は孤立したユーザーに関連している可能性があります。

試す

USE MASTER
GO
EXEC sp_change_users_login 'Report'

これにより、孤立したユーザー名ごとに 1 行が返されます。それで、

EXEC sp_change_users_login 'Update_One', 'dbuser', 'dbuser'
于 2010-06-15T09:50:01.980 に答える
1

ユーザーが使用するデータベースに対する権限を持っているかどうかを確認してください。これを行うにはSecurity -> Logins -> Select User、プロパティ ウィンドウを開きます。次に"User Mapping"、右のメニューから選択します。次に、特定のユーザーにアクセスを許可するデータベースを確認します。その後、ウィンドウの下部から「データベース ロール メンバーシップ」を選択し、 にチェックを入れ"db_owner"ます。これで、ユーザーはデータベースの所有者になり、クエリやストア プロシージャなどを実行できるようになります。

更新:
データベースを選択してデータベースのユーザーを追加します->セキュリティ->ユーザー->右クリック"New User"
または、このクエリを使用できます

CREATE LOGIN AbolrousHazem 
    WITH PASSWORD = '340$Uuxwp7Mcxo7Khy';
USE AdventureWorks2008R2;
CREATE USER AbolrousHazem FOR LOGIN AbolrousHazem;
GO 

詳細はこちらhttp://msdn.microsoft.com/en-us/library/ms173463.aspx

于 2010-06-15T08:58:23.097 に答える