요즈음 보안과 감사와 관련한 이슈들이 많이 제기되고 있는데요.
SQL 2008의 신기능인 CDC(Change Data Capture ) 를 사용하는 것도 나쁘지 않을 듯 해요.
simple-talk 에 잘 올라온 글이 있어서 링크 걸어요.
^^.
요즈음 보안과 감사와 관련한 이슈들이 많이 제기되고 있는데요.
SQL 2008의 신기능인 CDC(Change Data Capture ) 를 사용하는 것도 나쁘지 않을 듯 해요.
simple-talk 에 잘 올라온 글이 있어서 링크 걸어요.
^^.
DBA 면접 질문
1. RDBMS가 뭔가요?
2. 정규화가 뭔가요?
3. 각 정규형의 차이점은 무엇인가요? (1차, 2차, 3차 등)
4. 저장 프로시저는 무엇인가요?
5. 트리거는 무엇인가요?
6. 뷰는 무엇인가요?
7. 인덱스는 무엇인가요?
8. 클러스터드 인덱스와 넌클러스터드 인덱스의 차이는 무엇인가요?
9. 테이블에 설정될 수 있는 인덱스 형태들은 어떤 형태들이 있나요?
10. 커서는 무엇인가요?
11. DBCC 명령어는 어떤것들을 사용해 보았나요?
12. 연결된 서버는 무엇인가요?
13. 데이터 정렬(Collation)은 무엇인가요?
14. 데이터 정렬 종류는 어떤 것들이 있나요?
15. 프라이머리 키와 유니크 키의 차이는 무엇인가요?
16. 일대일, 일대다, 다대다 관계의 테이블 설계는 어떻게 하나요?
17. NOLOCK이 무엇인가요?
18. DELETE 명령어와 TRUNCATE 명령어의 차이는 무엇인가요?
19. Sql Server에서 지원하는 조인방식은 어떤 것들이 있나요?
20. HAVING 절과 WHERE 절과의 차이는 무엇인가요?
21. 서브쿼리가 무엇인가요?
22. 서브쿼리의 결과 종류는 어떤 것들이 있나요?
23. 프로파일러는 무엇인가요?
24. 사용자정의함수는 무엇인가요?
25. 사용자정의함수의 결과 종류는 어떤 것들이 있나요?
26. SQL Server의 TCP/IP 포트는 무엇인가요? 바꿀 수 있나요?
27. SQL Server의 인증 모드는 어떤것이 있나요? 바꿀 수 있나요?
28. SQL Server 로긴 유저와 암호는 어디에 저장되어 있나요?
29. SQL Server의 버전 정보를 확인할 수 있는 명령어는 무엇인가요?
30. SQL server 에이전트는 무엇인가요?
31. 저장프로시저는 재귀호출이 될까요? 몇단계까지 가능할까요?
32. @@ERROR 는 무엇인가요?
33. RAISERROR 는 무엇인가요..?
34. 로그전달은 무엇인가요?
35. 지역 임시 테이블과 전역 임시 테이블의 차이는 무엇인가요?
36. DB이름을 바꿀 수 있는 명령어는 무엇인가요?
37. sp_configure 명령어는 무엇인가요?
38. 복제의 종류는 어떤것들이 있는지 차이점을 설명해주세요.
39. SQL Server 설치시 추가되는 서비스들은 어떤 것들이 있나요?
40. 유저의 권한 변경 키워드 3개는 무엇이 있나요?
41. SET QUOTED_IDENTIFIER의 의미는 무엇인가요?
42. STUFF함수와 REPLACE함수와의 차이는 무엇인가요?
43. master 데이터베이스를 어떻게 재구축하나요?
44. 각 시스템데이터베이스들의 기능들은 무엇인가요?
45. 프라이머리키와 포린키는 무엇인가요?
46. 무결성이 무엇인가요? 제약 조건들에 대해서 설명해주세요.
47. 관계형 테이블의 속성은 무엇인가요?
48. 반정규화가 무엇인가요?
49. 어떻게 @@ERROR 와 @@ROWCOUNT 를 한번에 얻을 수 있나요?
50. Identity 컬럼이 무엇인가요?
51. 스케쥴 잡이 무엇인가요?
52. 어떤 인덱스도 가지고 있는 않은 테이블을 무엇이라고 부르고 무슨 목적으로 사용하나요?
53. BCP는 무엇인가요? 어떤 경우에 사용하나요?
54. JOIN절 대신에 서브쿼리를 대체할 수 있나요?
55. 오라클과 같은 다른 DBMS에 연결할 수 있나요?
56. 테이블이 사용중인 인덱스는 어떻게 알 수 있나요?
57. 다른 인스턴스로 테이블이나 스키마, 뷰 등을 복사하려면 어떻게 해야 하나요?
58. 셀프 조인이 무엇인가요?
59. 크로스 조인이 무엇인가요?
60. 가상 테이블에 트리거를 사용할 수 있나요?
61. 저장프로시저의 장점들을 설명해주세요.
62. 데이터웨어하우징이 무엇인가요?
63. OLTP가 무엇인가요?
64. XML은 어떻게 사용하나요?
65. 실행계획이 무엇인가요? 당신은 언제 사용하는지 어떻게 보는지 설명해주세요.
원문 : http://www.sqler.com/402338#19
이스트럭님 글(http://www.sqler.com/390533) 보다가… DB 엔진의 단일사용자 모드도 있지만 Database별로도 단일사용자 모드를 지정할 수 있습니다.
방법은 다음과 같습니다.
-- DB 단일사용자모드로(둘 중 하나) exec sp_dboption TestDB, 'single_user',true Go ALTER DATABASE TestDB SET SINGLE_USER Go -- DB 멀티사용자모드로(둘 중 하나) exec sp_dboption TestDB, 'single_user', false Go ALTER DATABASE TestDB SET MULTI_USER Go |
아래 명령은 잘 아실 테고요… 이를 실행하면 Virtual Log File이 몇 개인지 보여줍니다.
DBCC LOGINFO(DB명)
하지만, 전체적으로 얼마나 되는지 보려면 약간의 삽질을 해야 하는데, 아래 명령으로 편하게 보실 수 있습니다.
CREATE TABLE #eachDB(
FileID INT
, FileSize BIGINT
, StartOffset BIGINT
, FSeqNo BIGINT
, [Status] BIGINT
, Parity BIGINT
, CreateLSN NUMERIC(38)
);
CREATE TABLE #summary(
Database_Name sysname
, VLF_count INT
, Log_File_count INT
);
EXEC sp_MSforeachdb N'Use [?];
Insert Into #eachDB
Exec sp_executeSQL N''DBCC LogInfo(?)'';
Insert Into #summary
Select DB_Name(), Count(*), Count(Distinct FileID)
From #eachDB;
Truncate Table #eachDB;'
-- 결과 확인하기!
SELECT *
FROM #summary
ORDER BY VLF_count DESC;
-- 결과 확인 후 임시테이블 삭제
DROP TABLE #eachDB;
DROP TABLE #summary;
제가 직접 작성한 건 아니지만...
의외로 이거 쓸 데 많습니다.
권한 분리할 때 꼭 필요한 부분이라서요...
단, 실제 사용자에 따라 달리 줘야 하는 경우가 있으니 주의하시기 바랍니다.
SQL Server 2000
-- SELECT @CMD1 = 'GRANT EXEC ON ' + '[' + @OwnerName + ']' + '.' + '[' + @ObjectName + ']' + ' TO [' + @user +']' CREATE PROCEDURE spGrantExectoAllStoredProcs @user sysname AS /*---------------------------------------------------------------------------- -- Object Name: spGrantExectoAllStoredProcs -- Author: Edgewood Solutions -- Development Date: 03.19.2007 -- Called By: TBD -- Description: Issue GRANT EXEC statement for all stored procedures -- based on the user name that is passed in to this stored procedure -- Project: SQL Server Security -- Database: User defined databases -- Business Process: SQL Server Security -- ---------------------------------------------------------------------------- -- Num | CRF ID | Date Modified | Developer | Description ---------------------------------------------------------------------------- -- 001 | N\A | 03.15.2007 | Edgewood | Original code for the GRANT -- EXEC process -- -- */ SET NOCOUNT ON -- 1 - Variable declarations DECLARE @CMD1 varchar(8000) DECLARE @MAXOID int DECLARE @OwnerName varchar(128) DECLARE @ObjectName varchar(128) -- 2 - Create temporary table CREATE TABLE #StoredProcedures (OID int IDENTITY (1,1), StoredProcOwner varchar(128) NOT NULL, StoredProcName varchar(128) NOT NULL) -- 3 - Populate temporary table INSERT INTO #StoredProcedures (StoredProcOwner, StoredProcName) SELECT u.[Name], o.[Name] FROM dbo.sysobjects o INNER JOIN dbo.sysusers u ON o.uid = u.uid WHERE o.Type = 'P' AND o.[Name] NOT LIKE 'dt_%' -- 4 - Capture the @MAXOID value SELECT @MAXOID = MAX(OID) FROM #StoredProcedures -- 5 - WHILE loop WHILE @MAXOID > 0 BEGIN -- 6 - Initialize the variables SELECT @OwnerName = StoredProcOwner, @ObjectName = StoredProcName FROM #StoredProcedures WHERE OID = @MAXOID -- 7 - Build the string SELECT @CMD1 = 'GRANT EXEC ON ' + '[' + @OwnerName + ']' + '.' + '[' + @ObjectName + ']' + ' TO ' + @user -- 8 - Execute the string -- SELECT @CMD1 EXEC(@CMD1) -- 9 - Decrement @MAXOID SET @MAXOID = @MAXOID - 1 END -- 10 - Drop the temporary table DROP TABLE #StoredProcedures SET NOCOUNT OFF GO |
SQL Server 2005 이상
CREATE PROCEDURE spGrantExectoAllStoredProcs @user sysname AS /*---------------------------------------------------------------------------- -- Object Name: spGrantExectoAllStoredProcs -- Author: Edgewood Solutions -- Development Date: 03.19.2007 -- Called By: TBD -- Description: Issue GRANT EXEC statement for all stored procedures -- based on the user name that is passed in to this stored procedure -- Project: SQL Server Security -- Database: User defined databases -- Business Process: SQL Server Security -- ---------------------------------------------------------------------------- -- Num | CRF ID | Date Modified | Developer | Description ---------------------------------------------------------------------------- -- 001 | N\A | 03.15.2007 | Edgewood | Original code for the GRANT -- EXEC process -- -- */ SET NOCOUNT ON -- 1 - Variable declarations DECLARE @CMD1 varchar(8000) DECLARE @MAXOID int DECLARE @OwnerName varchar(128) DECLARE @ObjectName varchar(128) -- 2 - Create temporary table CREATE TABLE #StoredProcedures (OID int IDENTITY (1,1), StoredProcOwner varchar(128) NOT NULL, StoredProcName varchar(128) NOT NULL) -- 3 - Populate temporary table INSERT INTO #StoredProcedures (StoredProcOwner, StoredProcName) SELECT ROUTINE_SCHEMA, ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME NOT LIKE 'dt_%' AND ROUTINE_TYPE = 'PROCEDURE' -- 4 - Capture the @MAXOID value SELECT @MAXOID = MAX(OID) FROM #StoredProcedures -- 5 - WHILE loop WHILE @MAXOID > 0 BEGIN -- 6 - Initialize the variables SELECT @OwnerName = StoredProcOwner, @ObjectName = StoredProcName FROM #StoredProcedures WHERE OID = @MAXOID -- 7 - Build the string SELECT @CMD1 = 'GRANT EXEC ON ' + '[' + @OwnerName + ']' + '.' + '[' + @ObjectName + ']' + ' TO ' + @user -- 8 - Execute the string -- SELECT @CMD1 EXEC(@CMD1) -- 9 - Decrement @MAXOID SET @MAXOID = @MAXOID - 1 END -- 10 - Drop the temporary table DROP TABLE #StoredProcedures SET NOCOUNT OFF GO |