解决升级后的对象所有权差异
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 版本中创建的对象,请考虑使其所有权保持一致。
解决对象所有权差异
-
使用 PostgreSQL 端点连接到数据库集群中的
babelfish_db
数据库。 -
运行以下命令:
SELECT * from sys.generate_alter_ownership_statements();
这会生成 SQL 语句的列表,这些语句旨在实现对象间所有权的标准化。
-
先在测试环境中执行生成的语句以验证其效果,然后再应用于生产环境。
我们建议您执行这些语句,以便在整个数据库中实现一致的对象所有权模型。