맨날 헷갈린다.

정리해 봤다.



-- https://dbrang.tistory.com/142
CREATE DATABASE db;
GO  

--# login 추가
EXEC sp_addlogin 'motolies''defaultPassword1!''db';
ALTER LOGIN motolies WITH PASSWORD = 'changePassword' UNLOCKCHECK_POLICY = OFFCHECK_EXPIRATION = OFF;

--# 사용자 생성(해당 데이터베이스에 대한 접속 권한 부여)
USE db;
GO
SET ANSI_PADDING ON
GO
EXEC sp_grantdbaccess 'motolies';
GO

--# 사용자 역할 부여
EXEC sp_addrolemember 'db_owner''motolies';
GO




--# 로그인을 위한 추가
CREATE LOGIN motolies   
    WITH PASSWORD = '1234';  
GO  

--# 로그인 후 db 접속 사용자(아래와 같이 많들면 public 권한으로 만들어 진다)
USE db;
CREATE USER motolies FOR LOGIN motolies;  
GO  

--# 사용자 역할 부여
EXEC sp_addrolemember 'db_owner''motolies';
GO

/*
보통의 경우 db_owner 권한만 줘도 된다

-- https://kinanadel.blogspot.com/2019/07/mssql-microsoft-sql-server_12.html
db_accessadmin = 엔진에 접속할 윈도우 인증과 SQL Server 로그인을 수정할 권한.
db_backupoperator = 데이터베이스 백업 권한.
db_datareader = 테이블의 모든 데이터를 볼 수 있는 권한.
db_datawriter = 테이블에 데이터 수정 권한.
db_ddladmin = 데이터베이스의 모든 DDL 관련 명령을 실행할 권한.
db_denydatareader = 데이터베이스에 있는 모든 테이블의 데이터를 볼 수 있는 권한.
db_denydatawriter = 데이터베이스에 있는 모든 테이블의 데이터를 수정할 권한.
db_owner = 데이터베이스의 모든 설정과 관리 작업을 수행할 수 있는 권한.
db_secutiryadmin = 멤버 권한을 제한할 수 있는 권한.
public = 디폴트로 부여되는 최소한의 권한.
*/


--# 로그인 제거
DROP LOGIN motolies;  
GO 

--# 사용자 제거
DROP USER motolies;
GO

--# 로그인 제거 강제(삭제도 한 번에 가능)
USE master;
CREATE PROCEDURE DROP_LOGIN_FORCE
(
    @loginNameToDrop NVARCHAR(500)
)
AS
BEGIN
    -- https://stackoverflow.com/questions/4965260/drop-sql-login-even-while-logged-in
    DECLARE sessionsToKill CURSOR FAST_FORWARD FOR
        SELECT session_id
        FROM sys.dm_exec_sessions
        WHERE login_name = @loginNameToDrop
    OPEN sessionsToKill

    DECLARE @sessionId INT
    DECLARE @statement NVARCHAR(200)

    FETCH NEXT FROM sessionsToKill INTO @sessionId

    WHILE @@FETCH_STATUS = 0
    BEGIN
        PRINT 'Killing session ' + CAST(@sessionId AS NVARCHAR(20)) + ' for login ' + @loginNameToDrop

        SET @statement = 'KILL ' + CAST(@sessionId AS NVARCHAR(20))
        EXEC sp_executesql @statement

        FETCH NEXT FROM sessionsToKill INTO @sessionId
    END

    CLOSE sessionsToKill
    DEALLOCATE sessionsToKill

    PRINT 'Dropping login ' + @loginNameToDrop
    SET @statement = 'DROP LOGIN [' + @loginNameToDrop + ']'
    EXEC sp_executesql @statement

END

--# 프로시저 실행
exec master.dbo.DROP_LOGIN_FORCE 'motolies';













Posted by motolies
,