如何删除不再使用的数据库用户_用户账户界面的安全清理操作

大磊吖_9165

大磊吖_9165

2026-04-12

512人浏览

原创

应先检查依赖、连接和调用,再转移所有权或重置权限,最后按数据库规范执行删除命令。postgresql用reassign owned+drop user;mysql需全称匹配并flush privileges;sql server须先drop user后drop login。

postgresql 中如何安全删除闲置的 user?

直接执行 drop user 很危险——如果该用户还拥有数据库、表、函数或正在连接,命令会失败并报错 error: role "xxx" cannot be dropped because some objects depend on it。必须先解除依赖,再删。

  • 先查依赖:SELECT * FROM pg_depend WHERE refobjid = (SELECT oid FROM pg_roles WHERE rolname = 'old_user');
  • 重点看 classid 对应的系统表(如 pg_class 是表/索引,pg_database 是库),用 SELECT relname FROM pg_class WHERE oid = objid; 定位具体对象
  • 常见解法:把对象所有权转给 postgres 或其他活跃管理员,用 REASSIGN OWNED BY old_user TO new_admin;
  • 执行完再删:DROP USER old_user;

MySQL 删除用户时为什么 DROP USER 报 ERROR 1396 (HY000)?

这是 MySQL 的典型“残留授权记录”问题:用户被 DELETE FROM mysql.user 手动删过,但权限表没同步清理,或者主机名匹配不精确(比如创建时是 'user'@'192.168.%',删除时写了 'user'@'%')。

  • 务必用 SELECT User, Host FROM mysql.user WHERE User = 'old_user'; 确认完整 Host 值
  • 删除必须带全称:DROP USER 'old_user'@'192.168.%';,不能省略 @'host'
  • 删完运行 FLUSH PRIVILEGES;,否则旧连接可能仍能登录
  • 避免手动删 mysql.user 表——MySQL 8.0+ 已禁用该操作,5.7 及以前也极易破坏权限一致性

SQL Server 的 sp_dropuser 已废弃,现在该用什么?

sp_dropuser 在 SQL Server 2005 后就标记为废弃,2012+ 版本虽仍可用但不推荐;真正该用的是 DROP USER(数据库级)配合 DROP LOGIN(实例级),且顺序不能错。

  • 先删数据库用户:DROP USER [old_user];(在对应数据库上下文中执行)
  • 再删登录名:DROP LOGIN [old_user];(在 master 数据库中执行)
  • 如果报错 The database principal owns a schema,说明用户是某 schema 的 owner,得先用 ALTER AUTHORIZATION ON SCHEMA::[schema_name] TO dbo; 转移所有权
  • 注意:Windows 登录名(如 DOMAIN\user)和 SQL 登录名处理方式一致,但不能用通配符匹配删除

删用户前最容易被忽略的三个检查点

不是所有“闲置”都真的可删。很多故障源于删了还在被应用、定时任务或监控脚本暗中调用的账号。

  • 查当前连接:SELECT * FROM pg_stat_activity WHERE usename = 'old_user';(PostgreSQL)或 SELECT * FROM sys.dm_exec_sessions WHERE login_name = 'old_user';(SQL Server)
  • 查历史审计日志:MySQL 的 general_log 或 PostgreSQL 的 log_statement = 'all' 日志里搜用户名,确认最近 30 天无调用
  • 查应用配置文件和 CI/CD 脚本:搜索代码仓库里所有含 old_user 的 .env、application.yml、SQL 迁移脚本,别只盯着数据库本身

删用户不是单点操作,它牵扯权限链、对象归属、外部依赖。漏掉任意一环,轻则功能异常,重则数据不可写。动手前花五分钟查清楚,比出事后再恢复快得多。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

2023.06.29

2625

3

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2023.08.14

3861

10

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

2023.08.31

2871

3

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.05

927

5

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

2547

5

数据库对象名无效怎么解决
数据库对象名无效怎么解决

数据库对象名无效解决办法:1、检查使用的对象名是否正确,确保没有拼写错误;2、检查数据库中是否已存在具有相同名称的对象,如果是,请更改对象名为一个不同的名称,然后重新创建;3、确保在连接数据库时使用了正确的用户名、密码和数据库名称;4、尝试重启数据库服务,然后再次尝试创建或使用对象;5、尝试更新驱动程序,然后再次尝试创建或使用对象。

2023.10.16

2547

4

vb连接access数据库的方法
vb连接access数据库的方法

vb连接access数据库方法:1、使用ADO连接,首先导入System.Data.OleDb模块,然后定义一个连接字符串,接着创建一个OleDbConnection对象并使用Open() 方法打开连接;2、使用DAO连接,首先导入 Microsoft.Jet.OLEDB模块,然后定义一个连接字符串,接着创建一个JetConnection对象并使用Open()方法打开连接即可。

2023.10.16

2853

3

vb连接数据库的方法
vb连接数据库的方法

vb连接数据库的方法有使用ADO对象库、使用OLEDB数据提供程序、使用ODBC数据源等。详细介绍:1、使用ADO对象库方法,ADO是一种用于访问数据库的COM组件,可以通过ADO连接数据库并执行SQL语句。可以使用ADODB.Connection对象来建立与数据库的连接,然后使用ADODB.Recordset对象来执行查询和操作数据;2、使用OLEDB数据提供程序方法等等。

2023.10.19

2341

3

mdf文件导入数据库的方法
mdf文件导入数据库的方法

mdf文件导入数据库的方法有使用SQL Server Management Studio、使用SQL Server命令行工具、使用SQL Server Integration Services等方法。想了解更多mdf文件导入数据库的方法的相关内容,可以阅读本专题下面的文章。

2023.10.23

2513

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习