2011-01-13 16 views
0

データベース内の各アクセス許可に対して許可スクリプトを生成するストアドプロシージャがあります。グラントスクリプトが生成された後、私はどのようにスクリプトを自動的に実行するのだろうかと思っていましたか? (?この作品は意志)SQL Server動的ステートメントを実行するには

PROCEDURE [dbo].[IPAM_GRANT_DB_PERMS_SCRIPT] 
    @GRANTACTION NVARCHAR(20), 
    @TYPE NVARCHAR(20), 
    @ACTION INT 
AS 
    DECLARE @SQL NVARCHAR(2000) 
BEGIN 
    SET @SQL = '' 

    SELECT @SQL = (SELECT 'GRANT ' + @GRANTACTION + ' ON ' + 'a.name TO ' + user_name(b.uid) FROM SYSOBJECTS a ,SYSPROTECTS b WHERE a.TYPE IN (@TYPE) AND USER_NAME(b.UID) <> 'public' AND a.NAME NOT LIKE 'dt_%' AND a.ID=b.ID AND [email protected] 

    EXEC @SQL 
    PRINT @SQL 
END 

そして、ここでは、私が考えていたものである

PROCEDURE IPAM_EX_PERMS 
AS 
BEGIN 
    PRINT '--Initiating DELETE permissions--' 
    EXEC IPAM_GRANT_DB_PERMS_SCRIPT 'DELETE', 'U', 196 
    PRINT '--Completed DELETE permissions--' 
    PRINT '' 
    PRINT '' 
    PRINT '--Initiating INSERT permissions--' 
    EXEC IPAM_GRANT_DB_PERMS_SCRIPT 'INSERT', 'U', 195 
    PRINT '--Completed INSERT permissions--' 
    PRINT '' 
    PRINT '' 
    PRINT '--Initiating SELECT permissions--' 
    EXEC IPAM_GRANT_DB_PERMS_SCRIPT 'SELECT', 'U', 193 
    PRINT '--Completed SELECT permissions--' 
    PRINT '' 
    PRINT '' 
    PRINT '--Initiating UPDATE permissions--' 
    EXEC IPAM_GRANT_DB_PERMS_SCRIPT 'UPDATE', 'U', 197 
    PRINT '--Completed UPDATE permissions--' 
    PRINT '' 
    PRINT '' 
    PRINT '--Initiating EXECUTE permissions on Procedures--' 
    EXEC IPAM_GRANT_DB_PERMS_SCRIPT 'EXECUTE', 'P', 224 
    PRINT '--Completed EXECUTE permissions on Procedures--' 
    PRINT '' 
    PRINT '' 
    PRINT '--Initiating EXECUTE permissions on Functions--' 
    EXEC IPAM_GRANT_DB_PERMS_SCRIPT 'EXECUTE', 'Fn', 224 
    PRINT '--Completed EXECUTE permissions on Functions--' 
    PRINT '' 
    PRINT '' 
    PRINT '' 
    PRINT 'Finished processing grant permissions on the IPAM DB' 
END 
GO 
:ここ

私の手順です(私の目標は、スクリプトを作成して、自動的にスクリプトを実行することです)

答えて

0

を私は原因あればそこに新しいデータベースにこのスクリプトを実行するために冗長になるという事実のために、この質問を閉じています現在設定されているパーミッションはありません。

0

あなただけ

exec @SQL 

を変更した場合、私はそれがすべて動作するはずだと思います

exec (@SQL) 

それが十分に明確にしない場合は、次の例を試してみてください。

declare @foo varchar(30) 
set @foo = (select 'select 42') 
exec (@foo) 
+0

最後のかっこがありませんでした。しかし、私はIPAM_EX_PERMSを実行しているときにこのエラーを受け取っています。サブクエリは1つ以上の値を返しました。サブクエリが=、!=、<, <= , >、> =、またはサブクエリが式として使用されているときは、これは許可されません。 – mattgcon

関連する問題