让我们假设一个安全设计不好的数据库,假设每个人都以具有 DBADM 或 SYSADM 权限的用户访问数据库,而且每个人都可能只有用户名(即 db2inst1)。
我想执行一项管理任务,例如模式迁移,并且我需要成为唯一连接到数据库的人。
我如何确定我将是唯一访问数据库的人?
- Quiesce 数据库是不够的,因为其他用户使用高权限用户访问。
- 如果选择了限制访问,则静默实例不允许激活数据库。
- DB2COMM 可以从 db2set 中删除,但是最终可能会触发本地 cron。
- MAXAPPLS 为 1。但是,我应该是那个,如果不是再次强制应用程序应该发出。
- 如果用户被其他人使用,则无法以独占模式连接。
- 将工作负载配置更改为只允许我?(来自我的IP)
然而,对于一个简单的任务来说,这些变化太多了。
我看到了类似的讨论,但是我没有看到让我信服的东西:http: //database.ittoolbox.com/groups/technical-functional/db2-l/luw-how-to-prevent-connections-to-a-实例内的单个数据库 3189860
你的主张是什么?在那种情况下你会怎么做?
最简单的方法是简单地取消编目,然后使用不同的名称重新编目数据库(作为数据库服务器上的实例所有者执行此操作):
db2 uncatalog database SAMPLE
db2 catalog database SAMPLE as XXX on <path>
... 执行维护活动 ...
db2 uncatalog database XXX
db2 catalog database SAMPLE on <path>
任何尝试在数据库服务器上本地连接的用户,使用
connect to sample
,都会收到错误:但是,为了使远程连接也无法连接,您必须重新启动 DB2 实例。这是必需的,因为 DB2 TCP 连接管理器 (db2tcpcm) 将缓存数据库目录条目,因此在 EDU 重新启动之前它仍然“知道”数据库。重启 DB2 实例后,远程连接会报错:
必须重新启动实例不是最好的解决方案,但它可以工作。