アップグレード後のオブジェクトの所有権の違いに対処する
Babelfish バージョン 4.6 以降、および 5.2 以降には、TDS エンドポイントを介したオブジェクト所有権処理の変更が含まれています。TDS エンドポイントを使用して新しいオブジェクトを作成すると、これらのオブジェクトは現在のユーザーではなくスキーマ所有者によって所有されるようになりました。この所有権の変更は、4.6 または 5.2 より前のバージョンからアップグレードするときに、既存のオブジェクトと比較して新しいオブジェクトのアクセス許可の動作に影響する可能性があります。
これらの所有権の違いを解決するために、Babelfish は sys.generate_alter_ownership_statements() 関数を提供します。この関数は、オブジェクトの所有権とスキーマの所有権を一致させる SQL ステートメントを生成します。
オブジェクトの所有権に対処するときは、次の制限に注意してください。
-
PostgreSQL エンドポイントを介して付与された CREATE アクセス許可を持つユーザーは、それらのスキーマの TDS エンドポイントを介してオブジェクトを作成できません。
-
PostgreSQL エンドポイントを介して T-SQL オブジェクトのアクセス許可を変更することは推奨されず、T-SQL が正しく動作しなくなる可能性があります。
-
アクセス許可は、所有権の不一致により、古いオブジェクトと新しいオブジェクトで異なる場合があります。例えば、
sch_ownが所有するスキーマで、dboが所有するオブジェクトが含まれている場合を考えてみます。この場合、アップグレード前に作成され、dboが所有していたオブジェクトは、アップグレード後に作成され、sch_ownが所有するオブジェクトと比較して異なるアクセス許可を持つ可能性があります。これは、SELECT や INSERT などの操作に影響する可能性があります。
DB クラスターに 4.6 または 5.2 より前のバージョンの Babelfish で作成されたオブジェクトが含まれている場合は、その所有権を調整することを検討してください。
オブジェクトの所有権の違いに対処するには
-
PostgreSQL エンドポイントを使用して DB クラスターの
babelfish_dbデータベースに接続します。 -
次のコマンドを実行してください。
SELECT * from sys.generate_alter_ownership_statements();これにより、オブジェクト間の所有権を標準化するための SQL ステートメントのリストが生成されます。
-
生成されたステートメントを最初にテスト環境で実行し、実稼働環境に適用する前にその効果を検証します。
データベース全体で一貫したオブジェクト所有権モデルを実現するには、これらのステートメントを実行することをお勧めします。