将 SymmetricDS 与 Azure SQL 数据库一起使用时的权限问题
Posted
技术标签:
【中文标题】将 SymmetricDS 与 Azure SQL 数据库一起使用时的权限问题【英文标题】:Permission issue when using SymmetricDS with Azure SQL Database 【发布时间】:2018-06-05 05:17:41 【问题描述】:我有两个引擎:postgres.properties(主节点)和 azure.properties。两者都在同一台机器上。一个数据库在本地,一个在云端。
当 SymmetricDS 启动时,它给了我这个 Azure 引擎的错误:
2018-06-05 06:49:30,476 WARN [azure] [JdbcSqlTemplate] [symmetric-engine-startup-1] CREATE TABLE permission denied in database 'master'.. Failed to execute: CREATE TABLE "sym_channel"(
"channel_id" VARCHAR(128) NOT NULL,
"processing_order" INT DEFAULT 1 NOT NULL,
"max_batch_size" INT DEFAULT 1000 NOT NULL,
"max_batch_to_send" INT DEFAULT 60 NOT NULL,
"max_data_to_route" INT DEFAULT 100000 NOT NULL,
"extract_period_millis" INT DEFAULT 0 NOT NULL,
"enabled" SMALLINT DEFAULT 1 NOT NULL,
"use_old_data_to_route" SMALLINT DEFAULT 1 NOT NULL,
"use_row_data_to_route" SMALLINT DEFAULT 1 NOT NULL,
"use_pk_data_to_route" SMALLINT DEFAULT 1 NOT NULL,
"reload_flag" SMALLINT DEFAULT 0 NOT NULL,
"file_sync_flag" SMALLINT DEFAULT 0 NOT NULL,
"contains_big_lob" SMALLINT DEFAULT 0 NOT NULL,
"batch_algorithm" VARCHAR(50) DEFAULT 'default' NOT NULL,
"data_loader_type" VARCHAR(50) DEFAULT 'default' NOT NULL,
"description" VARCHAR(255),
"queue" VARCHAR(25) DEFAULT 'default' NOT NULL,
"max_network_kbps" DECIMAL(10,3) DEFAULT 0.000 NOT NULL,
"data_event_action" CHAR(1),
"create_time" DATETIME,
"last_update_by" VARCHAR(50),
"last_update_time" DATETIME,
PRIMARY KEY ("channel_id")
)
这是因为“主”数据库是read-only in Azure SQL databases。之后,[azure] 节点立即关闭。
INFO [azure] [AbstractSymmetricEngine] [symmetric-engine-startup-1] 停止 SymmetricDS externalId=001 version=3.9.7 database=Microsoft SQL Server
.. 然后 [postgres] 节点对此有话要说:
警告 [postgres] [PushService] [postgres-push-default-3] 无法推送到组“azure”中的节点“001”。同步网址为空
两个引擎都设置了同步 url 和注册 url,所以我认为真正的问题是权限问题。
问题:
如何解决此错误? 我假设我需要指示 SymmetricDS 使用“master”以外的数据库,但如何?
postgres.properties
engine.name=postgres
db.driver=org.postgresql.Driver
# The JDBC URL used to connect to the database
db.url=jdbc:postgresql://127.0.0.1/<redacted>
# The user to login as who can create and update tables
db.user=<redacted>
# The password for the user to login as
db.password=<redacted>
registration.url=
sync.url=http://localhost:31415/sync/postgres-000
# Do not change these for running the demo
group.id=postgres
external.id=000
# Don't muddy the waters with purge logging
job.purge.period.time.ms=7200000
# This is how often the routing job will be run in milliseconds
job.routing.period.time.ms=5000
# This is how often the push job will be run.
job.push.period.time.ms=10000
# This is how often the pull job will be run.
job.pull.period.time.ms=10000
# Kick off initial load
initial.load.create.first=true
azure.properties
engine.name=azure
db.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver # located in the libs folder
# The JDBC URL used to connect to the database
db.url=jdbc:jtds:sqlserver://<redacted>
# The user to login as who can create and update tables
db.user=<redacted>
# The password for the user to login as
db.password=<redacted>
sync.url=http://localhost:31415/sync/azure-001
registration.url=http://localhost:31415/sync/postgres-000
group.id=azure
external.id=001
# This is how often the routing job will be run in milliseconds
job.routing.period.time.ms=5000
# This is how often the push job will be run.
job.push.period.time.ms=10000
# This is how often the pull job will be run.
job.pull.period.time.ms=10000
【问题讨论】:
【参考方案1】:在文件azure.properties
中带有sync.url
的行被注释掉:
# sync.url=http://localhost:31415/sync/azure-001
经验法则是 symmetricDs 代理应尽可能靠近它同步的数据库。应该有一个对称 ds 代理在主节点附近运行,另一个在云中靠近天蓝色实例。您将无法同步只读数据库。 SymmetricDs 需要写入/读取,甚至创建表、函数、包和触发器权限才能正常工作
【讨论】:
1.此对称 ds 实例在与 SQL Server 数据库位于同一数据中心的 Azure VM 中运行。 PostgreSQL 数据库也在同一个虚拟机上运行。一切都“尽可能接近”。 2. 我取消了该行的注释(请参阅更新后的帖子),但它仍然告诉我同步 url 是空白的,即使我停止并重新启动 symmetricDS 3. 目标不是同步只读数据库。似乎 SymmetricDS 正在尝试在只读的“master”中创建所有“sym_trigger”、“sym_node”、“sym_router”等表。我假设我需要做的是让它在其他地方创建这些表。 您可以在另一个数据库架构中创建 sym_* 表、包和 true 这就是我想做的,但是怎么做呢?它试图自己创建这些表,我没有指示它这样做。我在哪里指定数据库架构? 您可以在 sym_trigger 和其他配置同步的 sym_* 表中声明架构 谢谢!事实证明,最重要的是,Azure 门户提供的 jbdc URL 格式不正确。编辑后,SymmetricDS 不再使用主数据库。它仍然告诉我“azure”节点的同步 url 是空白的,但是......有什么想法吗?以上是关于将 SymmetricDS 与 Azure SQL 数据库一起使用时的权限问题的主要内容,如果未能解决你的问题,请参考以下文章