问题描述
我有一个在 ECS 中运行的 pgadmin 容器。容器使用特定的 LDAP_BIND_USER
用户绑定到 LDAP 服务器,但随后每个用户都使用自己的凭据连接到 pgadmin。
我修改了 entrypoint.sh
以在容器首次启动时获取 RDS 实例列表并生成 servers.json 文件,这是通过 entrypoint.sh
中定义的此命令完成的:>
/venv/bin/python3 /pgadmin4/setup.py --load-servers "${PGADMIN_SERVER_JSON_FILE}" --user ${PGADMIN_DEFAULT_EMAIL}
问题
当容器在 SERVER mode
中运行时,我需要指定一个用户 (PGADMIN_DEFAULT_EMAIL
),在执行导入时这些服务器将对其可见。这意味着只有该用户才能看到服务器列表。
有没有办法为每个连接的用户导入服务器?
解决方法
所以,很遗憾这是不可能的!您只能将服务器导入特定用户,并且由于用户来自 LDAP,因此在用户第一次连接时,它们就会在 sqlite 数据库中创建。
有一种解决方法,虽然它不是很好,但它可以完成工作: 手动创建和导入数据库表(服务器组和服务器)!
这是用户表的样子:
CREATE TABLE user (
id INTEGER NOT NULL,username VARCHAR(256) NOT NULL,email VARCHAR(256),password VARCHAR(256),active BOOLEAN NOT NULL,confirmed_at DATETIME,masterpass_check VARCHAR(256),auth_source VARCHAR(256) NOT NULL DEFAULT 'internal',PRIMARY KEY (id),UNIQUE (username,auth_source),CHECK (active IN (0,1))
);
这是服务器表的样子:
CREATE TABLE server (
id INTEGER NOT NULL,user_id INTEGER NOT NULL,servergroup_id INTEGER NOT NULL,name VARCHAR(128) NOT NULL,host VARCHAR(128),port INTEGER,maintenance_db VARCHAR(64) NOT NULL,username VARCHAR(64),password VARCHAR(64),role VARCHAR(64),ssl_mode VARCHAR(16) NOT NULL CHECK(ssl_mode IN
( 'allow','prefer','require','disable','verify-ca','verify-full' )
),comment VARCHAR(1024),discovery_id VARCHAR(128),hostaddr TEXT(1024),db_res TEXT,passfile TEXT,sslcert TEXT,sslkey TEXT,sslrootcert TEXT,sslcrl TEXT,sslcompression INTEGER DEFAULT 0,bgcolor TEXT(10),fgcolor TEXT(10),service TEXT,use_ssh_tunnel INTEGER DEFAULT 0,tunnel_host TEXT,tunnel_port TEXT,tunnel_username TEXT,tunnel_authentication INTEGER DEFAULT 0,tunnel_identity_file TEXT,connect_timeout INTEGER DEFAULT 0,tunnel_password TEXT(64),save_password INTEGER DEFAULT 0,shared BOOLEAN,PRIMARY KEY(id),FOREIGN KEY(user_id) REFERENCES "user_old"(id),FOREIGN KEY(servergroup_id) REFERENCES servergroup(id)
);
这是服务器组表的样子:
CREATE TABLE servergroup (
id INTEGER NOT NULL,name VARCHAR(128) NOT NULL,FOREIGN KEY(user_id) REFERENCES "user_old" (id),UNIQUE (user_id,name)
);
仔细查看服务器表,我们可以看到每个 id 都有一个 user_id 和 servergroup_id 关联,因此我们可以手动创建这些表并在服务器启动之前导入值。
问题:每个用户都有一个服务器行,所以只需遍历用户的长度,每个人都会在他们的控制台中看到服务器