/*************************************************************/
-- 사용자와
관련
오브젝트
목록
확인
및
사용자
삭제
- SQL Server 2005
/*************************************************************/
USE master;
GO
/*************************************************************/
/**-- 테스트를
위한
사용자, 스키마, 테이블
생성--------------------------*/
-- 테스트
데이터
베이스
생성
CREATE DATABASE AccTestDB;
-- 로그인
생성
CREATE LOGIN AccountTestA WITH PASSWORD = 'test1';
CREATE LOGIN AccountTestB WITH PASSWORD = 'test2';
GO
-- 사용자
생성
USE AccTestDB;
GO
CREATE USER AccountTestA FOR LOGIN
AccountTestA WITH DEFAULT_SCHEMA =
AccSchema;
CREATE USER AccountTestB FOR LOGIN
AccountTestB WITH DEFAULT_SCHEMA =
AccSchema;
GO
-- 테이블
생성
권한을
위한
역할
추가
EXEC sp_addrolemember 'db_owner', 'AccountTestA';
EXEC sp_addrolemember 'db_owner', 'AccountTestB';
GO
-- 스키마
생성
CREATE SCHEMA AccSchema AUTHORIZATION AccountTestA;
-- 사용자
생성
확인
SELECT * FROM sys.sysusers;
SELECT * FROM sys.schemas;
-- SQL Server 2005에서는
소유자.테이블이
아닌
스키마.테이블로
테이블을
생성
EXECUTE AS LOGIN = 'AccountTestA';
GO
CREATE TABLE AccSchema.AccTable (Col1
int);
GO
/*************************************************************/
/**-- AccountTestA가
소유자인
오브젝트
목록
조회-------------------------*/
SELECT u.name as UserName, s.name as
SchemaName, o.Type as
ObjectType, o.name as
ObjectName
FROM sys.sysusers u
JOIN sys.schemas s ON
u.uid = s.principal_id
JOIN sys.objects o ON
s.schema_id=o.schema_id
WHERE u.name = 'AccountTestA'
/*************************************************************/
/**-- SQL Server 2005에서는
소유자가
스키마를
소유하고
스키마가
오브젝트를
소유하기
때문에
소유자를
삭제할
경우에는
오브젝트를
삭제하지
않고
삭제할
소유자가
소유한
스키마의
소유권을
이전한
후,
소유자를
삭제한다. --*/
-- 소유자삭제
DROP USER
AccountTestA
/*
메시지15138, 수준16, 상태1, 줄1
데이터베이스
보안
주체는
데이터베이스의
스키마을(를) 소유하며
삭제할
수
없습니다.
*/
-- AccountTestA 소유자인
테이블
목록
조회
SELECT u.name as UserName, s.name as
SchemaName
FROM sys.sysusers u JOIN sys.schemas s
ON u.uid = s.principal_id
WHERE u.name = 'AccountTestA'
-- 소유권
이전
ALTER AUTHORIZATION ON SCHEMA::AccSchema TO
AccountTestB;
GO
-- 삭제하려는
소유자를
가진
테이블
삭제
후, 사용자
삭제
DROP USER AccountTestA;
GO
SELECT * FROM sys.sysusers
WHERE name
= 'AccountTestA';
GO
/*
메시지916, 수준14, 상태1, 줄1
현재
보안
컨텍스트로는
서버
보안
주체
"AccountTestA"이(가) 데이터베이스
"AccTestDB"에
액세스
할
수
없습니다.
*/
/*************************************************************/
-- 데이터베이스
삭제
REVERT;
USE master;
DROP DATABASE AccTestDB;
-- 로그인
삭제
DROP LOGIN AccountTestA;
DROP LOGIN AccountTestB;