有一些要求我需要通过 JDBC 在 Java 中运行导出命令。因此下面是我执行的命令
CALL SYSPROC.ADMIN_CMD('EXPORT TO /tmp/header.csv OF DEL SELECT * FROM MYTABLE');
但是,当我通过 db2inst1 ssh 登录到数据库服务器时,我检查了 /tmp/header.csv 是由 db2fenc1 用户拥有的,它不允许我删除但只读访问权限,如下所示:
[db2inst1@26ea60b7e4a1 /]$ ls -lrt /tmp/header.csv
-rw-r--r-- 1 db2fenc1 db2fadm1 24335 Nov 12 12:25 /tmp/header.csv
我可以知道如何将 ADMIN_CMD 作为 db2inst1 执行吗?或任何其他解决方法?
这是设计使然;
ADMIN_CMD
和其他受保护的例程使用受保护的用户权限执行,以保护(“保护”)实例免受错误或恶意代码的侵害。有些人在实例创建过程中将受保护的用户设置为实例所有者 ID,这将导致受保护的例程以实例所有者权限运行。但是,这会造成严重的安全漏洞。
最好让您的系统管理员允许实例所有者受限
sudo
或runuser
权限来执行必要的命令,如db2fenc1
.