데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
DB -> 보안 -> 사용자 -> 소유한 스키마 에서
실수로 선택을 했는데, 수정도 안되고
해당 계정이 삭제도 안되는데 혹시 방법이 있나요??
Comment 1
-
냥아
2017.09.19 17:01
아래 sql 돌려보시고 print 되는 구문 있으면 실행하세요.
SET NOCOUNT ON
/* 데이터베이스 소유자 검색 */
select db.name as dbname
,sl.name
from sys.databases db
inner join
sys.syslogins sl
on db.owner_sid = sl.sid
/*
db별 스키마와 소유자가 다른 건
*/
DECLARE @SQL NVARCHAR(MAX) = N''
,@SQL_SKEL NVARCHAR(500)
DECLARE @SCHEMA_LIST TABLE(
DB VARCHAR(256)
,SCHEMA_NAME VARCHAR(256)
,PRINCIPAL_NAME VARCHAR(256)
,PRINCIPAL_TYPE VARCHAR(32)
)
SET @SQL_SKEL = N'
SELECT ''__DBNAME__'' AS DB
,SC.NAME AS SCHEMA_NM
,DP.NAME AS PRINCIPAL_NAME
,DP.TYPE_DESC
--,DP.DEFAULT_SCHEMA_NAME
--,OWNING_PRINCIPAL_ID
FROM __DBNAME__.SYS.SCHEMAS SC
LEFT OUTER JOIN
__DBNAME__.SYS.DATABASE_PRINCIPALS DP
ON SC.PRINCIPAL_ID = DP.PRINCIPAL_ID
WHERE SC.PRINCIPAL_ID <> SC.SCHEMA_ID
UNION ALL'
SELECT @SQL = @SQL + REPLACE(@SQL_SKEL, '__DBNAME__', NAME)
FROM sys.databases
WHERE name NOT IN('master', 'tempdb', 'model', 'msdb')
AND name NOT LIKE 'reportserver%'
AND state = 0 -- online
SET @SQL = LEFT(@SQL, LEN(@SQL) - 9)
INSERT INTO @SCHEMA_LIST
EXEC SP_EXECUTESQL @SQL
SELECT *
FROM @SCHEMA_LIST
IF (@@ROWCOUNT > 0) BEGIN
/*
스키마 소유자가 다른건 변경
*/
SET @SQL_SKEL = N'EXEC __DBNAME__.dbo.SP_EXECUTESQL N''ALTER AUTHORIZATION ON SCHEMA::[__SCHEMA__] TO [__SCHEMA__]''; ' + CHAR(13)
SET @SQL = N''
SELECT @SQL = @SQL + REPLACE(REPLACE(@SQL_SKEL, '__DBNAME__', DB), '__SCHEMA__', SCHEMA_NAME)
FROM @SCHEMA_LIST
PRINT @SQL
-- EXEC SP_EXECUTESQL @SQL
END