関数の実行に問題があります。
これが私がしたことです:
- SQL Server Management Studioを使用して関数を作成します。正常に作成されました。
- 次に、新しく作成した関数を実行してみましたが、次のものが得られます。
EXECUTE権限は、オブジェクト「xxxxxxx」、データベース「zzzzzzz」、スキーマ「dbo」で拒否されました。
GOてにCreate入れていましたGOCreate。他の構文エラーもこのエラーを与えるようです。
関数の実行に問題があります。
これが私がしたことです:
EXECUTE権限は、オブジェクト「xxxxxxx」、データベース「zzzzzzz」、スキーマ「dbo」で拒否されました。
GOてにCreate入れていましたGOCreate。他の構文エラーもこのエラーを与えるようです。
回答:
問題のストアドプロシージャの実行権限をユーザー(またはユーザーが属しているグループ)に付与する必要があるようです。
例えば、あなたは可能性がこのようにアクセス権を付与します。
USE zzzzzzz;
GRANT EXEC ON dbo.xxxxxxx TO PUBLIC
GRANT EXEC TO PUBLICして、データベース内のすべてのオブジェクトへのアクセスを許可することもできます
私が見つけた最良の解決策は、新しいデータベースの役割を作成することです。
CREATE ROLE db_executor;
次に、その役割にexec権限を付与します。
GRANT EXECUTE TO db_executor;
ユーザーのプロパティに移動してユーザーマッピングに移動し、新しいロールを追加したデータベースを選択すると、新しいロールが次のデータベースロールメンバーシップに表示されます。
EXEC sp_addrolemember @rolename = N'db_executor', @membername = N'processAPI'
SQL Server Management Studioで:
に行くだけsecurity->schema->dbo。
ダブルクリックしDBO、その後、上のクリックpermission tab->(blue font)view database permissionなどで必要なフィールドにスクロールして自由に感じる"execute".使用して選択するのヘルプあなた自身grantまたはdenyコントロール。これが役立つことを願っています:)
あなたはこのようなものを実行する必要があります
GRANT Execute ON [dbo].fnc_whatEver TO [domain\user]
[domain\user]むしろそうしなければなりませんでした'domain\user'
これは、ユーザーまたはロールに権限を付与しようとしている場合に機能します。
Microsoft SQL Server Management Studioの使用:
特にWebアプリケーションが同じユーザー名を使用している場合、そのような許可を与えることは危険な場合があります。
これで、Webユーザー(およびワールドワイドウェブ全体)は、データベース内でオブジェクトを作成およびドロップする権限も持っています。SQLインジェクションを考えてください!
次のように、指定されたオブジェクトの特定のユーザーにのみ実行権限を付与することをお勧めします。
grant execute on storedProcedureNameNoquotes to myusernameNoquotes
これで、ユーザーmyusernameNoquotesは、貴重なデータに対する他の不要な権限なしでプロシージャstoredProcedureNameNoquotesを実行できます。
作成するための十分な権限がありますが、実行する権限がありません。
詳細については、「GRANTオブジェクトのアクセス許可(Transact-SQL)」を参照してください。
ソリューションの実行時にスローされた例外に関して上記の質問のような問題がある場合、問題は権限であり、そのグループのユーザーにデータベース/ストアドプロシージャにアクセスする権限が適切に付与されていません。あなたがする必要があるのは、私があなたのデータベース名、ストアドプロシージャ(関数)、およびアクセス許可または役割のタイプ、またはあなたがアクセスを許可している人で私のものを置き換える、以下のようなことをすることです。
USE [StableEmployee]
GO
GRANT EXEC ON dbo.GetAllEmployees TO PUBLIC
/ ******オブジェクト:StoredProcedure [dbo]。[GetAllEmployees]スクリプト日付:01/27/2016 16:27:27 ****** /
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[GetAllEmployees]
as
Begin
Select EmployeeId, Name, Gender, City, DepartmentId
From tblEmployee
End
このユーザーを特定のデータベースに対して特別なものにする場合は、プロパティの「ユーザーマッピング」でdb_ownerとして設定しないでください。
セキュリティ特権のために設計されたサーバーの役割を変更する方がよいでしょう。ユーザーにsysadminサーバーロールを追加します。セキュリティを向上させるために、カスタムサーバーの役割を持たせることができます。しかし、このアプローチは今あなたが望むものをあなたに与えるでしょう。
幸運を