获取SQL数据库所有者与用户列表及权限清理、漏洞修复方案问询
SQL数据库用户权限清理及漏洞修复方案
一、正确查询用户与对应权限的SQL语句
你当前用的sys.sysusers视图只能获取用户基础信息,没法关联权限关系。可以通过系统视图关联查询,直接查看每个用户的权限详情:
SQL Server用户权限查询语句:
SELECT dp.name AS 用户名, dp.type_desc AS 用户类型, dp.default_schema_name AS 默认架构, perm.permission_name AS 权限名称, perm.state_desc AS 权限状态, obj.name AS 关联对象名 FROM sys.database_principals dp LEFT JOIN sys.database_permissions perm ON dp.principal_id = perm.grantee_principal_id LEFT JOIN sys.objects obj ON perm.major_id = obj.object_id ORDER BY dp.name, perm.permission_name;
这个查询会返回每个用户的类型、默认架构,以及他们拥有的具体权限(比如SELECT、INSERT、ALTER等)和对应的数据库对象。
如果要查看服务器级权限,用以下语句:
SELECT sp.name AS 登录名, sp.type_desc AS 登录类型, perm.permission_name AS 服务器权限, perm.state_desc AS 权限状态 FROM sys.server_principals sp LEFT JOIN sys.server_permissions perm ON sp.principal_id = perm.grantee_principal_id ORDER BY sp.name;
二、移除不必要权限/用户的操作
- 删除无用用户:确认无业务依赖后执行
DROP USER [用户名]; -- 删除对应服务器登录名 DROP LOGIN [登录名]; - 撤销不必要权限:针对特定用户撤销指定权限
REVOKE INSERT ON [表名] TO [用户名]; -- 撤销该用户在某对象上的所有权限 REVOKE ALL ON [表名] TO [用户名];
三、其他漏洞修复方案
- 严格遵循最小权限原则:只给用户完成工作所需的最低权限,比如只读业务账号只赋
SELECT权限,禁止普通用户拥有ALTER、DROP等高风险权限。 - 用角色管理权限:把权限赋给角色,再将用户加入对应角色,避免直接给用户赋权,简化权限维护。比如用内置角色
db_datareader、db_datawriter,或自定义业务角色。 - 定期做权限审计:每月/季度自动执行权限查询,对比权限基线,发现异常变更及时处理。
- 禁用闲置账号:长期未使用的账号先禁用而非直接删除,留足回溯空间:
ALTER USER [用户名] WITH DISABLE; ALTER LOGIN [登录名] DISABLE; - 使用AD集成认证:避免用SQL本地账号,通过域账号统一管理,方便权限回收和身份验证。
- 监控权限变更:开启SQL Server审计功能,记录所有权限变更操作,违规操作可快速溯源。
内容的提问来源于stack exchange,提问作者tehais
相关产品推荐
相关产品推荐

