SQLServer 安全加固:拒绝角色public使用扩展存储过程
发布时间:2020-12-12 13:26:40 所属栏目:MsSql教程 来源:网络整理
导读:当创建一个任意类型的登录账号是,sql server 默认会授予public服务器角色,或者数据库角色,并且不能撤销该角色。而public权限非常多,大部分是查询元数据的权限,其他还可以读取操作系统的各种信息!所以sql server?一个普通的账号,都可以获取所有数据库
当创建一个任意类型的登录账号是,sql server 默认会授予public服务器角色,或者数据库角色,并且不能撤销该角色。而public权限非常多,大部分是查询元数据的权限,其他还可以读取操作系统的各种信息!所以sql server?一个普通的账号,都可以获取所有数据库和操作系统信息了! 当前主要是禁用几个扩展存储过程的权限。 --查看当前授予的执行扩展存储过程的角色/用户 use master go SELECT A.name,schema_name(A.schema_id) [schema],A.type,b.permission_name,B.type,B.state_desc,C.name,c.type_desc FROM sys.all_objects AS A INNER JOIN sys.database_permissions AS B ON B.major_id=A.object_id AND B.minor_id=0 AND B.class=1 INNER JOIN sys.database_principals AS C ON C.principal_id = B.grantee_principal_id where B.type = 'EX' AND A.name LIKE 'XP_%' ORDER BY A.name --主要几个扩展存储过程,是什么功能呢? xp_dirtree xp_fileexist xp_fixeddrives xp_getnetname xp_grantlogin xp_instance_regread xp_MSADEnabled xp_msver xp_qv xp_regread xp_repl_convert_encrypt_sysadmin_wrapper xp_replposteor xp_revokelogin xp_sprintf xp_sscanf xp_sqlagent_enum_jobs xp_sqlagent_is_starting xp_sqlagent_notify ------------------------- ------------------------- --xp_dirtree :列出某磁盘下所有文件夹 EXEC master.sys.xp_subdirs 'D:' EXEC master.sys.xp_dirtree 'D:',1 --depth --xp_fileexist :目录或者文件是否存在 EXEC master.sys.xp_fileexist 'D:$RECYCLE.BIN' --xp_fixeddrives : 获取磁盘的可用容量. EXEC master.sys.xp_fixeddrives --xp_getnetname : 获取SQL服务器的名称. EXEC master.sys.xp_getnetname --xp_grantlogin : 授予windows用户或组权限(sysadmin) EXEC master.sys.xp_grantlogin @loginame = N'NT AUTHORITYSYSTEM',@logintype = N'admin' --xp_instance_regread : 读取注册表 DECLARE @dir NVARCHAR(4000) EXEC master.sys.xp_instance_regread N'HKEY_LOCAL_MACHINE',N'SoftwareMicrosoftMSSQLServerSetup',N'SQLPath',@dir output SELECT @dir --xp_MSADEnabled : (未知????) --xp_msver : SQL Server 的版本信息 EXEC master.sys.xp_msver --xp_qv : (未知????; 参考: sp_sysutility_mi_validate_enrollment_preconditions / sp_sqlagent_get_startup_info) --xp_regread : 读取注册表 DECLARE @dir1 NVARCHAR(4000) EXEC master.sys.xp_regread N'HKEY_LOCAL_MACHINE',@dir1 output SELECT @dir1 --xp_repl_convert_encrypt_sysadmin_wrapper : 请求证书签名(未知????) DECLARE @MK INT EXEC @MK=master.sys.xp_repl_convert_encrypt_sysadmin_wrapper @password = N'' SELECT @MK --xp_replposteor : (未知????) --xp_revokelogin : 删除windows用户或组账户 EXEC master.sys.xp_revokelogin @loginame = N'NT AUTHORITYSYSTEM' --xp_sprintf :设置一系列字符和值的格式并将其存储到字符串输出参数中 DECLARE @string varchar (255) EXEC master.sys.xp_sprintf @string OUTPUT,'INSERT INTO %s VALUES (%s,%s)','tab','1','''kk''' PRINT @string --xp_sscanf : 将数据从字符串读入每个格式参数所指定的参数位置 DECLARE @filename varchar (20),@message varchar (20),@name varchar (20) EXEC master.sys.xp_sscanf 'sync -b -fauthors10.tmp -rrandom 123','sync -b -f%s -r%s 1%s',@filename OUTPUT,@message OUTPUT,@name OUTPUT SELECT @filename,@message,@name --xp_sqlagent_enum_jobs : 作业运行状态 (参考: sp_get_composite_job_info/sp_syscollector_get_collection_set_execution_status ) EXEC master.sys.xp_sqlagent_enum_jobs 1,'sa' --xp_sqlagent_is_starting : 代理是否运行(返回都为0,似乎无效,参考:sp_is_sqlagent_starting) DECLARE @retval INT EXEC master.sys.xp_sqlagent_is_starting @retval OUTPUT SELECT @retval --xp_sqlagent_notify : (参考: sp_sqlagent_notify/sp_attach_schedule/sp_add_jobschedule ) 拒绝public权限使用前6个! 未知的还是暂时不禁用. xp_dirtree :列出某磁盘下所有文件夹 xp_fileexist :目录或者文件是否存在? xp_grantlogin : 授予windows用户或组权限(sysadmin) xp_instance_regread : 读取注册表 xp_regread : 读取注册表 xp_revokelogin : 删除windows用户或组账户 xp_MSADEnabled : (未知????) xp_qv : (未知???? xp_repl_convert_encrypt_sysadmin_wrapper : 请求证书签名(未知????) xp_replposteor : (未知????) --生成脚本执行!不回收权限,给予拒绝(deny)权限,以后可方便知道更改了哪些. use master GO SELECT A.name,'DENY '+b.permission_name COLLATE Chinese_PRC_CI_AS +' ON '+A.name+' TO '+C.name FROM master.sys.all_objects AS A INNER JOIN master.sys.database_permissions AS B ON B.major_id=A.object_id AND B.minor_id=0 AND B.class=1 INNER JOIN master.sys.database_principals AS C ON C.principal_id = B.grantee_principal_id where B.type = 'EX' AND A.name IN('xp_dirtree','xp_fileexist','xp_grantlogin','xp_instance_regread','xp_regread','xp_revokelogin') ORDER BY A.name GO --查看更多! SELECT A.name,C.name FROM master.sys.all_objects AS A LEFT JOIN master.sys.database_permissions AS B ON B.major_id=A.object_id AND B.minor_id=0 AND B.class=1 LEFT JOIN master.sys.database_principals AS C ON C.principal_id = B.grantee_principal_id ORDER BY A.name (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |