데이터베이스 단위로 권한 부여

--Example 
-- DB 명 : TEST_DB
-- Account : test_acc


use [TEST_DB]
GO
-- 권한 부여
GRANT SELECT TO [test_acc]
GRANT ALTER TO [test_acc]
GRANT DELETE TO [test_acc]
GRANT UPDATE TO [test_acc]
GRANT INSERT TO [test_acc]
GRANT CREATE TABLE TO [test_acc]
GO

-- 권한 제거
DENY UPDATE TO [test_acc]
DENY DELETE TO [test_acc]

스키마 단위로 권한 부여

--Example 
-- DB 명 : TEST_DB
-- 스키마 : dbo
-- Account : test_acc


USE [TEST_DB]
GO

CREATE USER [test_acc] FOR LOGIN [test_acc] WITH DEFAULT_SCHEMA=[dbo]

GRANT CONNECT TO test_acc AS [dbo]
GRANT SELECT TO test_acc AS [dbo]
GRANT DELETE TO test_acc AS [dbo]
GRANT UPDATE TO test_acc AS [dbo]
GRANT EXECUTE TO test_acc AS [dbo]
GRANT VIEW DEFINITION TO test_acc AS [dbo]
GO

지정 SP에 권한 부여

--Example
--DB 명 : TEST_DB
-- SP명 : sp_TEST_update
-- Account : Test_Acc

USE [TEST_DB]
GO

grant execute on sp_TEST_update to Test_Acc 
GO

일부 DB만 DB 리스트에 보여지도록

-- Database 소유자를 제외하고 DB 리스트가 보이지 않게 하는 형식

--Example
-- DB 명 : TEST_DB
-- Account :
---- TEST_Service : Database 리스트에 'TEST_DB' DB 확인 불가
---- TEST_Admin : Database 리스트에 'TEST_DB' DB 확인 가능

USE [master] 
GO

alter authorization on database::TEST_DB to TEST_Admin;
deny VIEW ANY DATABASE TO TEST_Service;
GO
-- DB 이관 시 계정 권한 동기화 용도로 사용
-- Database 단위로 실행 필요


--구문
sp_change_users_login [ @Action = ] 'action'   
    [ , [ @UserNamePattern = ] 'user' ]   
    [ , [ @LoginName = ] 'login' ]   
    [ , [ @Password = ] 'password' ]  
[;]  

--현재 사용자와 로그인 간의 매핑에 대한 보고서
EXEC sp_change_users_login 'Report';  

--Create the new login.  
CREATE LOGIN MaryB WITH PASSWORD = '982734snfdHHkjj3';  
GO  
--Map database user MB-Sales to login MaryB.  
USE AdventureWorks2012;  
GO  
EXEC sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB';  
GO 

--계정명이 동일한 경우
EXEC sp_change_users_login 'Update_One', 'MaryB', 'MaryB';  
GO

'DB Skill > MSSQL' 카테고리의 다른 글

MSSQL Error Log 초기화  (0) 2021.06.07
MSSQL 기능 단위로 계정 권한 부여  (0) 2021.06.07
MSSQL 계정에 Role 추가  (0) 2021.06.06
MSSQL 서비스 도중 Hostname 변경  (0) 2021.06.06
MSSQL Long Running Job Check  (0) 2021.06.06
-- Server Role 추가
EXEC sp_addsrvrolemember  '로그인이름' , '역할이름'
 
-- Database Role 추가
EXEC sp_addrolemember  '역할이름' , '데이터베이스 사용자이름' 

참고 자료

http://egloos.zum.com/totoriver/v/3158687

 

[MS-SQL] ▣ 로그인, 사용자, 사용권한, 역할

로그인- SQL Server에 접속할 수 있는 것을 말함- Windows의 'administrator' = '컴퓨터이름\Administrator'- 'Administrator' 그룹의 사용자들= 'BUILTIN\Administrators'- 'sa'는 디폴트로 사용할 수 없게 되어있지만 하위

egloos.zum.com

 

-- MSSQL Hostname은 캐시되고 있기 때문에, OS상 hostname이 변경되면 수동으로 변경해 주어야함.

-- 확인
select @@servername
select host_name()

-- 변경
exec sp_dropserver '기존 hostname명'
exec sp_addserver '변경된 hostname명', 'local'

-- DB 재시작
-- 아래 스크립트를 사용하여 Long Running Check Job을 '[DBA] Long Running Job Check' 이름으로 생성

declare @JOB_INTERVAL_SEC table
(
	job_id   uniqueidentifier
,	run_interval_sec int
)

insert into @JOB_INTERVAL_SEC
select	job_id, datediff(SECOND, min(run_datetime_2), min(run_datetime_1)) as run_interval_sec
from 
(
	select	job_id
		,	case when job_num = 1 then run_datetime else getdate() end AS run_datetime_1
		,	case when job_num = 2 then run_datetime else getdate() end AS run_datetime_2
	from 
	(
		select	job_id
			,	convert(datetime, format(run_date,'####-##-##') + ' ' + format(run_time,'####:##:##'), 120) AS run_datetime
			,	row_number() over(partition by job_id order by  instance_id desc ) AS job_num
		from [msdb].[dbo].[sysjobhistory]
		where step_id = 0
	) AS T
	where job_num in (1,2)
) TT
group by job_id

--select * from @JOB_INTERVAL_SEC

declare	@cur_job_name sysname
	,	@cur_job_id uniqueidentifier
	,	@cur_start_execution_date datetime
	,	@cur_stop_execution_date datetime
	,	@cur_last_executed_step_date datetime
	,	@cur_next_scheduled_run_date datetime
	,	@cur_run_interval_sec int
	,	@cur_running_second int
	,	@cur_error_message varchar(1024)

declare cur cursor for

select	jam.job_name, jam.job_id
	,	sja.start_execution_date, sja.stop_execution_date, sja.last_executed_step_date, sja.next_scheduled_run_date
	,	JIS.run_interval_sec
	,	datediff(second, start_execution_date, getdate()) AS running_second
from
(
	select max(sa.session_id) AS session_id_max, sa.job_id, sj.name AS job_name from msdb.dbo.sysjobactivity sa
	inner join msdb.dbo.sysjobs sj
	on sa.job_id = sj.job_id
	where sj.enabled = 1
	group by  sa.job_id, sj.name
)  jam
inner join  msdb.dbo.sysjobactivity sja
on jam.session_id_max = sja.session_id
and jam.job_id = sja.job_id
inner join @JOB_INTERVAL_SEC JIS
on sja.job_id = JIS.job_id
where sja.stop_execution_date IS NULL
and datediff(second, start_execution_date, getdate()) > JIS.run_interval_sec

open cur
fetch next from cur into @cur_job_name, @cur_job_id, @cur_start_execution_date, @cur_stop_execution_date, @cur_last_executed_step_date, @cur_next_scheduled_run_date, @cur_run_interval_sec, @cur_running_second
		
while @@fetch_status = 0
begin
	set @cur_error_message = '[error] : the job schedule has not yet ended !!   ';
	set @cur_error_message = @cur_error_message + '[job_name] : ' + convert(varchar(100),@cur_job_name) + ' [cur_job_id] : ' + convert(varchar(100),@cur_job_id) + ' [cur_start_execution_date] : ' + convert(varchar(100),@cur_start_execution_date,121)
							+ ' [cur_run_interval_sec] : ' + convert(varchar(100),@cur_run_interval_sec) + ' [cur_running_second] : ' + convert(varchar(100),@cur_running_second)
							--+ ' cur_stop_execution_date : ' + convert(varchar(100),@cur_stop_execution_date,121) + ' cur_last_executed_step_date : ' + convert(varchar(100),@cur_last_executed_step_date) + ' cur_next_scheduled_run_date : ' + convert(varchar(100),@cur_next_scheduled_run_date)							
	
	--select @cur_job_name, @cur_run_interval_sec, @cur_running_second
	--select @cur_error_message
	if @cur_job_name <>  '[DBA] Long Running Job Check'
	BEGIN
		RAISERROR(@cur_error_message, 16,1) 
	END

	fetch next from cur into @cur_job_name, @cur_job_id, @cur_start_execution_date, @cur_stop_execution_date, @cur_last_executed_step_date, @cur_next_scheduled_run_date, @cur_run_interval_sec, @cur_running_second
end

close cur
deallocate cur

'DB Skill > MSSQL' 카테고리의 다른 글

MSSQL 계정에 Role 추가  (0) 2021.06.06
MSSQL 서비스 도중 Hostname 변경  (0) 2021.06.06
MSSQL Database 암호화 키 삭제  (0) 2021.06.06
MSSQL CPU 선호도 설정  (0) 2021.06.06
MSSQL Table Constraints Check 비활성화  (0) 2021.06.06
-- 데이터 베이스 암호화 제거
ALTER DATABASE AdventureWorks2012  
SET ENCRYPTION OFF;  

-- 암호화 키 삭제
DROP DATABASE ENCRYPTION KEY  

-- 데이터베이스 암호화 확인
SELECT db_name(database_id), encryption_state  
FROM sys.dm_database_encryption_keys;  


---------------------------
---------------------------

ALTER DATABASE AdventureWorks2012  
SET ENCRYPTION OFF;  
GO  
/* Wait for decryption operation to complete, look for a   
value of  1 in the query below. */  
SELECT encryption_state  
FROM sys.dm_database_encryption_keys;  
GO  
USE AdventureWorks2012;  
GO  
DROP DATABASE ENCRYPTION KEY;  
GO  

---------------------
ALTER DATABASE AdventureWorksPDW2012  
    SET ENCRYPTION OFF;  
GO  
/* Wait for decryption operation to complete, look for a   
value of  1 in the query below. */  
WITH dek_encryption_state AS   
(  
    SELECT ISNULL(db_map.database_id, dek.database_id) AS database_id, encryption_state  
    FROM sys.dm_pdw_nodes_database_encryption_keys AS dek  
        INNER JOIN sys.pdw_nodes_pdw_physical_databases AS node_db_map  
           ON dek.database_id = node_db_map.database_id AND dek.pdw_node_id = node_db_map.pdw_node_id  
        LEFT JOIN sys.pdw_database_mappings AS db_map  
            ON node_db_map .physical_name = db_map.physical_name  
        INNER JOIN sys.dm_pdw_nodes AS nodes  
            ON nodes.pdw_node_id = dek.pdw_node_id  
    WHERE dek.encryptor_thumbprint <> 0x  
)  
SELECT TOP 1 encryption_state  
       FROM  dek_encryption_state  
       WHERE dek_encryption_state.database_id = DB_ID('AdventureWorksPDW2012 ')  
       ORDER BY (CASE encryption_state WHEN 3 THEN -1 ELSE encryption_state END) DESC;   
GO  
USE AdventureWorksPDW2012;  
GO  
DROP DATABASE ENCRYPTION KEY;  
GO  

참고 자료

https://docs.microsoft.com/ko-kr/sql/t-sql/statements/drop-database-encryption-key-transact-sql?view=sql-server-ver15 

 

DROP DATABASE ENCRYPTION KEY(Transact-SQL) - SQL Server

DROP DATABASE ENCRYPTION KEY(Transact-SQL)

docs.microsoft.com

'DB Skill > MSSQL' 카테고리의 다른 글

MSSQL 서비스 도중 Hostname 변경  (0) 2021.06.06
MSSQL Long Running Job Check  (0) 2021.06.06
MSSQL CPU 선호도 설정  (0) 2021.06.06
MSSQL Table Constraints Check 비활성화  (0) 2021.06.06
MSSQL backup history delete  (0) 2021.06.06
-- 1번 NUMA Node CPU 사용하지 않도록 설정
ALTER SERVER CONFIGURATION SET PROCESS AFFINITY NUMANODE = 1
GO

-- CPU 선호도를 Auto로 설정
ALTER SERVER CONFIGURATION  
SET PROCESS AFFINITY CPU=AUTO;  

GUI 설정

참고 자료

https://docs.microsoft.com/ko-kr/sql/t-sql/statements/alter-server-configuration-transact-sql?view=sql-server-ver15#Affinity

 

ALTER SERVER CONFIGURATION(Transact-SQL) - SQL Server

ALTER SERVER CONFIGURATION(Transact-SQL)

docs.microsoft.com

https://www.sqlpassion.at/archive/2017/10/02/setting-a-processor-affinity-in-sql-server-the-unwanted-side-effects/

 

Setting a Processor Affinity in SQL Server – the (unwanted) Side-Effects |

(Be sure to checkout the FREE SQLpassion Performance Tuning Training Plan - you get a weekly email packed with all the essential knowledge you need to know about performance tuning on SQL Server.) Today I want to talk about a very important topic in SQL Se

www.sqlpassion.at

 

-- Disable all table constraints
ALTER TABLE MyTable NOCHECK CONSTRAINT ALL

-- Enable all table constraints
ALTER TABLE MyTable WITH CHECK CHECK CONSTRAINT ALL

-- Disable single constraint
ALTER TABLE MyTable NOCHECK CONSTRAINT MyConstraint

-- Enable single constraint
ALTER TABLE MyTable WITH CHECK CHECK CONSTRAINT MyConstraint

backup history delete

-- 2019년 1월 1일 이전 데이터 모두 삭제
EXEC SP_DELETE_BACKUPHISTORY '1/1/2019'


-- 삭제 시간이 너무 오래 걸리는 경우... 인덱스 생성.
CREATE INDEX [media_set_id] ON [dbo].[backupset] ([media_set_id])
CREATE INDEX [restore_history_id] ON [dbo].[restorefile] ([restore_history_id])
CREATE INDEX [restore_history_id] ON [dbo].[restorefilegroup] ([restore_history_id])

방법

데이터베이스 파일 (MDF, NDF)에 대해 초기화(Zeroing)하지 않고 즉시 생성되도록 하려면 SQL Server 서비스 시작계정에 대해 [볼륨 유지관리 작업 수행] (Perform Volume Maintenance Tasks) 권한이 부여되어 있어야 합니다.
권한을 부여해 준 후 SQL Server 서비스를 재시작해줘야 적용되며, ERRORLOG에서 권한 적용 여부를 확인할 수 있습니다

  1. 이터 파일을 생성할 컴퓨터에서 로컬 보안 정책 애플리케이션(secpol.msc)을 엽니다.
  2. 왼쪽 창에서 로컬 정책 을 확장한 다음 사용자 권한 할당 을 클릭합니다.
  3. 오른쪽 창에서 '볼륨 유지 관리 작업 수행'(Perform volumn maintenance tasks) 을 두 번 클릭합니다.
  4. 사용자 또는 그룹 추가 를 클릭하고 SQL Server 서비스를 실행하는 계정(Default: NT SERVICE\MSSQLSERVER)을 추가합니다.
  5. 적용 을 클릭한 다음 모든 로컬 보안 정책 대화 상자를 닫습니다.
  6. SQL Server 서비스를 다시 시작합니다

확인

SQLServer 재시작 이후 ERRORLOG에서 권한 적용 여부를 확인

sp_readerrorlog
Database Instant File Initialization: 사용. For security and performance considerations see the topic 'Database Instant File Initialization' in SQL Server Books Online. This is an informational message only. No user action is required.

참고 자료

[https://docs.microsoft.com/ko-kr/sql/relational-databases/databases/database-instant-file-initialization?view=sql-server-ver15\]


to Top