1

ユーザーが大きなデータ ファイルをアップロードし、そのデータを解析して SQL Server 2008 R2 データベースに保存できるアプリがあります。

ユーザーはデータに関するレポートを実行でき、データ量が非常に多いため、データがインポートされているテーブルで UPDATE STATISTICS を自動的に実行したいと考えています。

データ アクセスはストアド プロシージャを介して行われ、ユーザーはテーブルに対する権限を持たず、ストアド プロシージャでのみ実行されます。

テーブル名を取得し、sp_Executesql を使用して、渡されたテーブル名に対して UPDATE STATISTICS を実行するストアド プロシージャを作成しました。ストアド プロシージャとテーブルの両方が dbo によって所有されています。「存在しないか権限がないため、オブジェクト「テーブル」が見つかりません」というエラーが表示されます。ユーザーにテーブルの変更を許可すると、正常に機能しますが、それを避けたいと思います。テーブルとストアド プロシージャが同じ所有者によって所有されている場合、ユーザーのアクセス許可は無視されると思いました。

テーブルの変更権限がなくても UPDATE STATISTICS を実行することはできますか?

4

2 に答える 2

6

を使用する場合、ユーザーの権限を無視することはできませんsp_executesql。プロシージャを他の誰かのコンテキストで実行しない限り。別のユーザーを選ぶのではなく、ログインなしでユーザーを作成します。という名前のテーブルがあるとしましょうdbo.farb。そのユーザーfoobarblatはできませんALTER(DENY必須ではありませんが、実際に要点を証明しています)。

USE master;
GO
CREATE LOGIN foobarblat WITH PASSWORD = 'foobarblat', CHECK_POLICY = OFF;
GO
USE YourDatabase;
GO
CREATE USER foobarblat FROM LOGIN foobarblat;
GO
CREATE TABLE dbo.farb(id INT);
GO
DENY ALTER ON dbo.farb to foobarblat;
GO

それでは、非表示のユーザーを作成しましょう。実際には誰もこのユーザーとしてログインできないため、このユーザーに世界中のすべてのアクセス許可を与えることができますが、この例ではALTER、テーブルに付与するだけで済みます):

CREATE USER SuperSecret WITHOUT LOGIN;
GO
GRANT ALTER ON dbo.farb TO SuperSecret;
GO

SuperSecretこれで、ユーザーのコンテキストで実行されるストアド プロシージャを作成できますが、次の方法で実行できfoobarblatます。

CREATE PROCEDURE dbo.UpdateStats
    @tablename NVARCHAR(511)
WITH EXECUTE AS 'SuperSecret'
AS
BEGIN
    DECLARE @sql NVARCHAR(MAX);
    SET @sql = N'UPDATE STATISTICS ' + @tablename;
    EXEC sp_executesql @sql;
END
GO
GRANT EXEC ON dbo.UpdateStats TO foobarblat;

を使用して新しいウィンドウに接続しますfoobarblat-これを問題なく実行できるはずです:

EXEC dbo.UpdateStats 'dbo.farb';
于 2012-06-15T02:34:43.770 に答える
5

Aaron Bertrand が言ったことに加えて、別のソリューションをミックスに追加します: モジュール署名です。必要な手順 (一言で言えば):

  • 証明書を作成する
  • それをSQL Serverにインポートします
  • 証明書からログインを作成する
  • ログインからユーザーを作成する
  • ユーザーにアクセス許可を付与します (この場合は、テーブルを変更します)
  • 証明書を使用してストアド プロシージャに署名する
  • ストアド プロシージャを実行する必要がある人に、ストアド プロシージャに対する実行権限を付与します。

私が思う利点は、プロシージャが実行されているときに、実際に誰が実行しているのかがわかることです。不利な点は、ストアド プロシージャに変更を加えると、再署名が必要になることです (つまり、署名は変更後も維持されません)。アーロンのアプローチには、反対の欠点/利点があります。

于 2012-06-15T17:31:16.913 に答える