none
ストアドプロシージャの実行権限をまとめて与えられるロールを用意してほしい RRS feed

  • 質問

  • ストアドプロシージャやユーザー定義関数の実行権限を与えるのに

    一つずつ

    GRANT EXECUTE ON オブジェクト名 TO ユーザー名

    で与えなければならず面倒です。

    一括して許可するロールを用意して欲しいです。

     

    2008年2月1日 0:14

回答

  • Code Snippet
    USE AdventureWorks
    GO
    SELECT @@version
    GO
    SELECT 'GRANT EXECUTE ON OBJECT::' + SCHEMA_NAME(schema_id) + '.' + name + ' TO myUser'
    FROM sys.objects
    WHERE type = 'P'
    OR type = 'FN'
    OR type = 'IF'
    OR type = 'TF'
    GO

     

    結果

    Microsoft SQL Server 2005 - 9.00.3054.00 (Intel X86)
     Mar 23 2007 16:28:52
     Copyright (c) 1988-2005 Microsoft Corporation
     Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 2)


    GRANT EXECUTE ON OBJECT:Big Smilebo.uspPrintError TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.uspLogError TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnLeadingZeros TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnGetAccountingStartDate TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnGetAccountingEndDate TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnGetContactInformation TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnGetProductDealerPrice TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnGetProductListPrice TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnGetProductStandardCost TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnGetStock TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnGetDocumentStatusText TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnGetPurchaseOrderStatusText TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnGetSalesOrderStatusText TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.uspGetBillOfMaterials TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.uspGetEmployeeManagers TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.uspGetManagerEmployees TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.uspGetWhereUsedProductID TO myUser
    GRANT EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeeHireInfo TO myUser
    GRANT EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeeLogin TO myUser
    GRANT EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeePersonalInfo TO myUser

    (20 行処理されました)

     

    2008年2月2日 4:04

すべての返信

  • Code Snippet
    USE AdventureWorks
    GO
    SELECT @@version
    GO
    SELECT 'GRANT EXECUTE ON OBJECT::' + SCHEMA_NAME(schema_id) + '.' + name + ' TO myUser'
    FROM sys.objects
    WHERE type = 'P'
    OR type = 'FN'
    OR type = 'IF'
    OR type = 'TF'
    GO

     

    結果

    Microsoft SQL Server 2005 - 9.00.3054.00 (Intel X86)
     Mar 23 2007 16:28:52
     Copyright (c) 1988-2005 Microsoft Corporation
     Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 2)


    GRANT EXECUTE ON OBJECT:Big Smilebo.uspPrintError TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.uspLogError TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnLeadingZeros TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnGetAccountingStartDate TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnGetAccountingEndDate TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnGetContactInformation TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnGetProductDealerPrice TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnGetProductListPrice TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnGetProductStandardCost TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnGetStock TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnGetDocumentStatusText TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnGetPurchaseOrderStatusText TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.ufnGetSalesOrderStatusText TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.uspGetBillOfMaterials TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.uspGetEmployeeManagers TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.uspGetManagerEmployees TO myUser
    GRANT EXECUTE ON OBJECT:Big Smilebo.uspGetWhereUsedProductID TO myUser
    GRANT EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeeHireInfo TO myUser
    GRANT EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeeLogin TO myUser
    GRANT EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeePersonalInfo TO myUser

    (20 行処理されました)

     

    2008年2月2日 4:04
  • ありがとうございます。これならできそうです。

    返信が遅くなり申し訳ありません。

    できればWhere文のtype=のそれぞれの文字が

    何に当たるのか教えていただきたいのですが。

    2008年2月6日 12:21
  •  island_town さんからの引用

    できればWhere文のtype=のそれぞれの文字列が何に当たるのか教えていただきたいのですが。

     

    SQL Server 2005 Books Online - sys.objects (Transact-SQL)

    http://msdn2.microsoft.com/ja-jp/library/ms190324.aspx

     

    AF = 集計関数 (CLR)

    C = CHECK 制約

    D = DEFAULT (制約またはスタンドアロン)

    F = FOREIGN KEY 制約

    PK = PRIMARY KEY 制約

    P = SQL ストアド プロシージャ

    PC = アセンブリ (CLR) ストアド プロシージャ

    FN = SQL スカラ関数

    FS = アセンブリ (CLR) スカラ関数

    FT = アセンブリ (CLR) テーブル値関数

    R = ルール (旧形式、スタンドアロン)

    RF = レプリケーション フィルタ プロシージャ

    S = システム ベース テーブル

    SN = シノニム

    SQ = サービス キュー

    TA = アセンブリ (CLR) DML トリガ

    TR = SQL DML トリガ

    IF = SQL インライン テーブル値関数

    TF = SQL テーブル値関数

    U = テーブル (ユーザー定義)

    UQ = UNIQUE 制約

    V = ビュー

    X = 拡張ストアド プロシージャ

    IT = 内部テーブル

     

    2008年2月6日 22:30
  • ありがとうございます。教えていただいたページはとても役に立ちます。

    さて私はSQLServer2000なのですが

    SCHEMA_NAMEという関数がないらしく

    sys.objectsもsysobjectsというテーブル名らしく

    schema_idという列も無く

    またtype=IFはEXECUTE権限を与えることができないらしく

    またシステムオブジェクトが出てくるのではずすのにcategory<>2を付けると良いらしく

    結局以下のようになりました。

     

    SELECT 'GRANT EXECUTE ON ' + name + ' TO MyUser'
    FROM sysobjects
    WHERE
    (type = 'P'
    OR type = 'FN'
    OR type = 'TF'
    )
    AND category <> 2
    GO

     

     

    2008年2月7日 0:33