현직 MSSQL 컨설턴트 입니다.
고객사에 SQL 설치를 하러 가기전 준비 하다가 잠시 생각나서 적어봅니다.
가벼운 주제로 MS-SQL 이용시 보안점검 항목과 체크방법에 대해서 적어봅니다.
1. 불필요한 계정이 있지 않은가?
- 굳이 말을 안해도 될 만큼 취약한 보안 이겠죠?
확인법 : Select name, dbname, password from syslogins
조치 : Exec sp_droplogin ‘user name’
2. 계정의 권한 제한
- 일반적인 사용자가 DBA 권한을 가지고 있을 필요는 없겠죠?
- 일반적인 사용자라면 권한을 db_datareader ,
작업을 하시는 분이라면db_datrawriter 권한만으로도 충분합니다.
확인법 : Exec sp_helpsrvrolemember 'sysadmin'
조치법 : Exec sp_droprolemember 'user name', 'sysadmin'
3. 고정 서버 역할 제한
- 시스템 내장 함수 등을 사용할 수 있는 권한이 있으므로 적절히 제한을 하는것이 좋습니다.
확인법 : Exec sp_helpsrvrolemember
조치법 : Exec sp_droprolemember 'role name', 'user name'
4. 시스템테이블에 접근 권한 제한을 줬는가?
- 테이블 소유자나 DBA 권한을 가진 사용자 외에는 가능한 접근을 제한하는것이 좋습니다.
확인법:
select su.name as principal_name, dp.type_desc as principal_type_desc, ao.type_desc, ao.name as object_name, p.permission_name, p.state_desc as permission_state_desc from sys.database_permissions p, sys.database_principals dp, sys.all_objects ao, sys.sysusers su where ao.object_id=p.major_id and p.grantee_principal_id=dp.principal_id and p.grantee_principal_id=su.uid and dp.name='public' and ao.type='S' |
select su.name as principal_name, dp.type_desc as principal_type_desc, ao.type_desc, ao.name as object_name, p.permission_name, p.state_desc as permission_state_desc from sys.database_permissions p, sys.database_principals dp, sys.all_objects ao, sys.sysusers su where ao.object_id=p.major_id and p.grantee_principal_id=dp.principal_id and p.grantee_principal_id=su.uid and dp.name='public' and ao.type='S'
조치법 :
[권한 제거]
1). Use database name
Revoke <권한> on <object> from [user name]|[public]|[guest]
2). 시스템 테이블에 접근하기 위해서는 stored procedure 또는 information_schema views를 통해서 접근해야 함
3). 시스템 테이블에 접근 가능한 stored procedure는 사용이 제한되어야 함
간단히 매우 중요한 사항만 적어봤습니다 :)
0개의 댓글이 있습니다.