解决升级后的对象所有权差异 - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

解决升级后的对象所有权差异

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 拥有的对象。在这种情况下,与在升级后创建的由 sch_own 拥有的对象相比,在升级前创建的由 dbo 拥有的对象可能具有不同的访问权限。这可能会影响诸如 SELECT 和 INSERT 之类的操作。

如果数据库集群包含在 4.6 或 5.2 之前的 Babelfish 版本中创建的对象,请考虑使其所有权保持一致。

解决对象所有权差异
  1. 使用 PostgreSQL 端点连接到数据库集群中的 babelfish_db 数据库。

  2. 运行以下命令:

    SELECT * from sys.generate_alter_ownership_statements();

    这会生成 SQL 语句的列表,这些语句旨在实现对象间所有权的标准化。

  3. 先在测试环境中执行生成的语句以验证其效果,然后再应用于生产环境。

我们建议您执行这些语句,以便在整个数据库中实现一致的对象所有权模型。