-1
TO TRIGGER上で実行:SQL ServerのGRANTは、私は、このトリガーを持っているUSER
CREATE TRIGGER [dbo].[TRIGGER_UPDATE_MODIFIED]
ON [dbo].[MY_TABLE]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE [dbo].[MY_TABLE] SET [DATE_MODIFIED] = GETDATE(), [USER_MODIFIED] = CASE WHEN UPDATE ([USER_MODIFIED]) THEN i.[USER_MODIFIED] ELSE RIGHT(SUSER_NAME(), 100) END
FROM INSERTED i
WHERE [MY_TABLE].[SOME_FIELD] = i.[SOME_FIELD]
END
私は私が行うユーザーSOME_USER
にこのトリガーにEXECUTE
権限を付与する必要があります。
GRANT EXECUTE
ON OBJECT::[dbo].[TRIGGER_UPDATE_MODIFIED] TO [SOME_USER]
WITH GRANT OPTION
AS [dbo];
GO
そして、私は、次の取得しますエラー:
Cannot find object 'TRIGGER_UPDATE_MODIFIED' because it does not exist or user does not have permission.
なぜこのエラーが発生し、どのように解決できますか?
私はこのことについて考えている:
CREATE TRIGGER [dbo].[TRIGGER_UPDATE_MODIFIED]
ON [dbo].[MY_TABLE]
WITH EXECUTE AS 'SOME_USER'
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE [dbo].[MY_TABLE] SET [DATE_MODIFIED] = GETDATE(), [USER_MODIFIED] = CASE WHEN UPDATE ([USER_MODIFIED]) THEN i.[USER_MODIFIED] ELSE RIGHT(SUSER_NAME(), 100) END
FROM INSERTED i
WHERE [MY_TABLE].[SOME_FIELD] = i.[SOME_FIELD]
END
は正しい(WITH EXECUTE AS 'SOME_USER'
を使用して)ことですか?おそらくWITH EXECUTE AS OWNER
を使用していますか?
どのような違いがありますか?
私はあなたがトリガにアクセス許可を与えることができるとは思いません。代わりに、テーブルに対するアクセス許可を付与する必要があります。 –
[このsocial.MSDNスレッド](https://social.msdn.microsoft.com/Forums/sqlserver/en-US/edc8acc6-d710-4c0b-bc6c-209912575557/database-trigger-permission?forum)をご覧ください。 = sqlsecurity) - 役に立つかもしれません。 – 3N1GM4
トリガーの権限は、アクションが対応する基本表に対して実行されるたびに実行されるため、許可を与えません。 –