作为IT安全审计的一部分,数据库权限审核也应该包括在其中。一般情况下,数据库管理员应该定期发送权限报告给相关人员审核,确保这是一个持续性完善的过程。
当然,作为持续性改善计划,肯定需要python来自动化实现了,人都是有惰性,谁能保证一直做下来不出错?
下面跟大家分享一下笔者通过python实现SQL SERVER数据库权限审计的方法吧。
先分享一下报告的主要审核点,一般而言,权限审计,审的就是哪个权限,对应有哪些人之类的。
从上图可以看出,在数据库中对用户赋予了权限,都可以清楚的看出来,然后定期的发送给对应Business Owner即可。
设计方法如下:
- 准备好相关的SQL语句,能够查询到相关权限,语句如下:
select DbRole = g.name, MemberName = u.name, MemberSID = u.sid from sys.database_principals u, sys.database_principals g, sys.database_role_members m where g.principal_id = m.role_principal_id and u.principal_id = m.member_principal_id order by 1, 2
在这个语句中,可以手工查询到指定数据库的用户权限。
- 使用python连接数据库,执行步骤1中的语句,返回执行结果。
- 设计报告模板,讲步骤2中返回的结果写入报告模板中。报告模板为html格式,返回结果需要进行html转换,作为一个固定的格式报告,使用table即可。
- 通过邮件发送给指定用户,同时在系统里面设计一个计划任务,就可以实现定时发送。
备注:如果涉及到sql connectionstring的密码问题,可以将py文件通过pyinstaller进行打包。当然如果要求更高的话,就需要加密打包,通过外部python模块来实现了。
小结:这个方法感觉是不是很简单?其实对数据库的常规操作都可以通过这样的方式实现自动化,比如数据库大小监控,当然,如果有整体的性能监控除外。也可以实现数据库空间报警等,具体的就看大家的需求了,思路是一样的。盖以抛砖引玉,希望能有更多的延伸。