如何为指定数据库用户授予同一时间仅创建1个连接的权限
当然可以配置,主流数据库都提供了原生的用户级并发连接数限制能力,无需额外调整基础权限配置,不同数据库的操作方案如下:
MySQL 配置方案
MySQL 支持直接通过用户属性设置最大同时连接数,5.0及以上版本均可使用该方案:
- 执行修改用户属性命令:
ALTER USER 'admin'@'访问主机地址' WITH MAX_USER_CONNECTIONS 1;
通常本地访问的话主机地址填localhost,如果允许远程访问可以填对应的IP段或者%。 - 执行
FLUSH PRIVILEGES;让配置立即生效 - 验证方式:执行
SHOW GRANTS FOR 'admin'@'访问主机地址';即可在返回结果中看到连接数限制参数
PostgreSQL 配置方案
PostgreSQL 通过角色的CONNECTION LIMIT参数实现用户级连接数限制:
- 新建用户时可直接指定限制:
CREATE ROLE admin WITH LOGIN CONNECTION LIMIT 1; - 已创建的用户可执行修改命令调整:
ALTER ROLE admin WITH CONNECTION LIMIT 1; - 验证方式:执行以下查询,返回结果中
rolconnlimit字段为1即代表配置生效:SELECT rolname, rolconnlimit FROM pg_roles WHERE rolname = 'admin';
注意:PostgreSQL的超级用户不受
CONNECTION LIMIT参数限制,如果admin用户是超级用户,需要先回收超级用户权限后该限制才会生效。
Oracle 配置方案
Oracle 通过 Profile 资源配置文件实现用户级会话数限制:
- 首先创建专门的单连接限制Profile:
CREATE PROFILE single_conn_profile LIMIT SESSIONS_PER_USER 1; - 将Profile绑定到admin用户:
ALTER USER admin PROFILE single_conn_profile; - 开启数据库资源限制(默认可能未开启):
ALTER SYSTEM SET RESOURCE_LIMIT = TRUE SCOPE=BOTH; - 验证方式:执行以下查询确认配置生效:
SELECT p.resource_name, p.limit FROM dba_users u JOIN dba_profiles p ON u.profile = p.profile WHERE u.username = 'ADMIN' AND p.resource_name = 'SESSIONS_PER_USER';
内容的提问来源于stack exchange,提问作者Mahesh Kumar
相关产品推荐
相关产品推荐

