1. 서버에서 mysql 로 접속한다.

 

mysql -u root 

mysql -u root -p // 비밀번호 치고 들어가야 할 때

 

 

2. mysql 스키마 변경

use mysql;

 

 

3. user 테이블 조회

select host , user, password from user;

 

4. 계정 생성

create '계정아이디'@'ip' indentified by '비밀번호';

ex)
create user 'test'@'%' IDENTIFIED BY  'test1!';
create user 'test2'@'127.0.0.1' IDENTIFIED BY  'test1!';

 

생성한 user 삭제

 

delete from user where user='test2';

 

 

5. 권한 설정

grant select , insert , update , delete on  스키마명.테이블명 to '계정 아이디 '@'아이피';

grant all privileges on 스키마명.테이블명 to '계정명'@'호스트명' identified by '계정비밀번호' with grant option;

 

첫번째는 주어진거만 , 로 구분해서 권한을 주면 된다.

두번째는 전체 권한이고 

 

 

6. 권한 조회 

show grants for '계정아이디'@'호스트';

ex)
show grants for 'test'@'%';

 

 

7. 권한 삭제

revoke all on '스키마명'.'테이블명' from '계정명'@'호스트';

 

'DEVELOP > DB' 카테고리의 다른 글

[DB] postgreSql Centos7에 설치 및 설정하기  (0) 2020.08.24
[DB]Isolation Level 알아보기  (0) 2020.07.19
[MariaDB] general log 설정하기  (0) 2020.05.25
DB (mysql) 설정 변경  (0) 2020.03.13
NewSql 이란? All in one DBMS  (0) 2019.12.16

MariaDB에는 다양한 로그가 있다.

 

모든 query log가 나올 수 있는 general log가 있고

 

느린 쿼리를 수집하는 slow로그 

 

에러로그를 수집하는 에러로그

 

그중에서 오늘은 general log에 대해서 알아보도록 하자

 

 


1.  root 권한으로 mysql로 접속

우선 서버에서 root 권한으로 들어가준다.

 

mysql -u root 

mysql -u root -p // 비밀번호 치고 들어가야 할 때

 

그리고 mysql로 들어가줌!

 

 

2. general log에 관한 설정 조회

general log에 관한 설정을 조회 해준다.

 

MariaDB [(none)]> show variables like 'general%';
+------------------+-------------------------+
| Variable_name    | Value                   |
+------------------+-------------------------+
| general_log      | OFF                      |
| general_log_file | general.log |
+------------------+-------------------------+

 

 

3. general log 설정 on

set GLOBAL general_log='ON';
set GLOBAL general_log_file='/data/general.log';

이러면 설정은 끝난다.

그치만 매번 DB를 올리고 내릴때마다 같은 설정을 유지하고 싶으니깐

 

my.cnf 파일을 수정해준다.

 

vi /etc/my.cnf

[mysqld]
general_log = 1
general_log_file=/data/general.log

 

만약, 권한이 없으면 sudo 권한으로 열어준다!

( sudo vi /etc/my.cnf )

 

 

default general_log 테이블은 CSV 엔진을 사용하기 때문에 MyIsam 엔진으로 변경한다.

아래와 같은 에러 발생 시 general_log 를 off 시킨 후 수행해야함!

mysql> alter table mysql.general_log engine=MyIsam;

4. 로그 수집 방법 (FILE / TABLE)

 

로그 수집 방법을 조회 해준다.

MariaDB [(none)]> show variables like 'log_output%';
+---------------+------------+
| Variable_name | Value      |
+---------------+------------+
| log_output    | FILE       |
+---------------+------------+
1 row in set (0.001 sec)

 

그런데 나는 로그에서 매번 user_host 즉, ip가 나왔으면 했다.

 

 

그런데 general-log에서는 FILE 로그에서는 connect 할때는 ip가 나오는데 

그 이후, query에서는 나오지 않았다.

 

그런데 table 에서는 기본적으로 user_host가 있으므로 TABLE로 로그를 수집하기로 하였다.

 

cf) 이를 대체하는 방법으로 slow log의 시간을 조정해주는 방법이 있다. 

왜냐면,, slow 로그는 모든 ip를 수집하기 때문이다.

 

SET GLOBAL long_query_time = 0.01;


MariaDB [(none)]> show variables like 'long%';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 0.100000 |
+-----------------+----------+
1 row in set (0.001 sec)


 

 

 

잠시 삼천포에 빠졌었는데 다시 !

그럼 TABLE 에 로그를 쌓도록 수정하겠다.

 

set global log_output='TABLE';

 

그런데 이러면 slow 로그등 다른 로그들도 영향을 받는다.. 그래서 FILE 도쓰고 TABLE도 쓰겠당!

 

set global log_output='TABLE,FILE';

 

그러면 mysql에 general_log라는 테이블이 기본 지원 되기때문에 해당 테이블을 조회 하면 connect , query, 권한 부여등

모든 것이 나온다!

 

 

 

 

event_time	user_host	thread_id	server_id	command_type	argument
03:03.8	root[root] @ localhost []	24	1	Query	show variables like '%log%'

 

 

'DEVELOP > DB' 카테고리의 다른 글

[DB]Isolation Level 알아보기  (0) 2020.07.19
[mySql] 계정 생성 및 권한 설정  (0) 2020.05.25
DB (mysql) 설정 변경  (0) 2020.03.13
NewSql 이란? All in one DBMS  (0) 2019.12.16
NoSql DB 종류  (0) 2019.12.13

이전에 OAuth 2.0에 대해서 정리하는 글을 올렸었다.

그렇다면 Spring 에서 OAuth를 어떻게 구현할까?

 

그게 바로 Spring Security인데 그것에 대해서 알아보고자한다.

 

OAuth와 Spring Security는 여러번 보았는데

볼때마다 헷갈리고 다시 공부하는 느낌이다

 

부디 이번에 조금이나마 더 정리되길 바라며,,, 포스팅 시작한닷..ㅁ7ㅁ8

 


1. OAuth란?

Open Authorization , Open Authentication ( Open 인증 , Open 인가) 로

자신의 애플리케이션 서버의 데이터를 다른 Third Party 에게 공유나 인증을 처리해줄 수 있는 오픈 표준 프로토콜이다

 

즉,,

내 서버의 어플리케이션에 접근 하려면 인증을 거쳐야 하는데, 

이것의 표준이라고 생각하면 된다 ( 인증 & 인가)

 

이 개념이 궁금하면?

https://hyeonyeee.tistory.com/48

 

OAuth 2.0이란?

Oauth 2.0 는 무엇인가,, 알아보겠다 이전엔 보통 open api를 이용할때 토큰을 받아와서 헤더값이 넣어주는 걸 즉, 토큰값을 받아오는걸 구현한 방식이 OAuth 라고 알고있었다 이것도 맞지만 더 자세히

hyeonyeee.tistory.com

다음 포스팅을 참고하자.

 

 

2. Spring에서 OAuth 2.0?

OAuth가 오픈 표준 프로토콜이면 , 

Spring에서 OAuth를 구현하려면? 

Spring Security를 쓰면된닷,,!

 

 

 

3. Spring Security

이제 어느 부분을 구현해보면 되는지 알아보자.

다행히 Spring에서는 많은 소스를 제공해준다

엄청 복잡하게 공부할 수도있지만 우선, 나는 간단하게,, 이해해보겠다.

 

5가지 Grant Type중 

Resource Owner Password Credentials 방식으로 구현해보자.

 

여기서 크게 구현해야 될것은 세가지다.

 

 

1. AuthenticationProvider (Interface)

인증을 담당할 클래스를 구현

UserDetailServiceImpl에서 받아은 유저의 정보를 인증이 완료되면 Authentication 객체를 리턴해준다.

 

 

2. UserDetailService (Interface)

UserDetailService를 implements해서 custom UserDetailService를 만들어주어야한다.

user의 정보를 DB에서 받아온다.

 

3. Authentication Provider 추가하기 

 - SecurityConfig extends WebSecurityConfigurerAdapter

 

1번에서 만든 내가만든 인증 클래스를 ProviderManager에게 등록해주어야 한다.

 

 

 

 

 

 

 

 

 


 

참고)

HTTP Basic Auth 
가장 기본적이고 단순한 형태의 인증 방식으로 사용자 ID와 PASSWD를 HTTP Header에 Base64 인코딩 형태로 넣어서 인증을 요청한다.
예를 들어 사용자 ID가 terry이고 PASSWD가 hello world일 때, 다음과 같이 HTTP 헤더에 “terry:hello world”라는 문자열을 Base64 인코딩을해서 “Authorization”이라는 이름의 헤더로 서버에 전송하여 인증을 요청한다.
Authorization: Basic VGVycnk6aGVsbG8gd29ybGQ=
중간에 패킷을 가로채서 이 헤더를 Base64로 디코딩하면 사용자 ID와 PASSWD가 그대로 노출되기 때문에 반드시 HTTPS 프로토콜을 사용해야 한다.

 

 

en.wikipedia.org/wiki/Basic_access_authentication

 

 

 


https://jeong-pro.tistory.com/205

 

로그인 과정으로 살펴보는 스프링 시큐리티 아키텍처(Spring Security Architecture)

Spring Security Architecture 학습 목표 스프링 시큐리티를 처음 배우는 사람 또는 적어도 한 번은 적용해본 사람을 기준으로 "가장 기본이자 뼈대인 구조를 이해한다"는 학습 목표가 있다. 수 많은 블��

jeong-pro.tistory.com

 

https://minwan1.github.io/2018/03/11/2018-03-11-Spring-OAuth%EA%B5%AC%ED%98%84/

 

Wan Blog

WanBlog | 개발블로그

minwan1.github.io

 

https://spring.io/guides/topicals/spring-security-architecture

 

Spring Security Architecture

this topical is designed to be read and comprehended in under an hour, it provides broad coverage of a topic that is possibly nuanced or requires deeper understanding than you would get from a getting started guide

spring.io

 

^^; 예전에

글을 열심히 썼었는데...

ㅠㅠ 다날라갔다 다시 정리하는겸

써야지~

jpa공부해보니 꼭 실제 업무할때 써보고싶었다

그래야 더 잘 느낄 수 있을거 같다.

 

 


1. JPA 란 ? ( 그외 개념들)

JPA (Java Persistence API) : 자바 어플리케이션에서 관계형 데이터 베이스를 사용하는 방식을 정의한 인터페이스

 

JPA가 인터페이스면 이를 구현한 것도 있지 않을까?

그게바로 Hibernate이다.

 

Hibernate : JPA라는 명세의 구현체이다.

 

쉽게 설명하자면, JPA와 Hibernate는 자바의 interface와 interface를 구현한 class와 같은 관계이다.

즉, 반드시 Hibernate를 쓸 필요는 없다. 그런데 대부분 사용하고 있긴하다.

 

 

Spring Data JPA : JPA를 더 쉽고 편하게 사용할 수 있도록 도와주는 모듈이다. 

JPA를 한단계 추상화시킨 Repository라는 인터페이스를 제공한다.

 

대부분 개발할때 Repository를 이용한다,,

 

 

2. JPA를 왜 쓸까?

jpa는 DB와 객체사이를 mapping해주는 중간자 역할을 해준다.

그래서 기존에 jdbc를 쓸때 쿼리를 이용해서 data에 접근하였었는데 

쿼리를 이용하지 않고, 개발할 때 객체지향적인 관점에서만 접근하게 해준다. 그래서 더 효용이 좋다.

 

 

그런데 여기서  쿼리만 써본 사람들은 의문이 들 것이다.

현재 운영되고 있는 복잡한 쿼리들을 어떻게 JPA로 대체할 수 있을까?

나도 이거에 대한 의문점이 있었는데

 

우선, 간단한 조인 같은건 Querydsl로 적용이 가능하다.

 

그리고 애초에 DB설계자체를 객체지향적으로 하면 

애초에 그렇게 복잡한 쿼리가 나오지 않을 거란 설명이 설득력 있었다.

 

아래 참고 블로그에서 특히 JPA를 왜 쓰는지에 대해서 자세히 나와 있었는데

그중 와닿는 말은 다음과 같다.

 

 

JPA로 실무를 하다 보면, 테이블 중심에서 객체 중심으로 개발 패러다임이 변화된다.

테스트, 통합 테스트시에 CRUD를 믿고 간다.(내가 짠 쿼리는 그것 마저 테스트를 거쳐 가야 한다.)
- 이런거 테스트 할 시간에 CRUD 믿고, 핵심 비즈니스 테스트 코드를 열심히 짜자.


빠르게 에러를 발견할 수 있다.
- 컴파일 시점에 대부분 오류를 발견할 수 있다
-최소한 뭐리 문법 실수나 오류는 거의 발생하지 않는다.



 

https://ict-nroo.tistory.com/117

 

다음 블로그에 자세히 나와있으니 읽어보는 것을 추천한다.

 

 

그리고 실제로도 나도 간단한 개발을 해보았는데 혼자서..

쿼리를 짤때 자잘한 문법오류나 매핑해주는 데에서 오타가 나서 

오류가 나거나 하는 사소한 실수를 전혀 신경쓰지 않아도 되어서 좋았다.

 

 

 


https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/

 

JPA, Hibernate, 그리고 Spring Data JPA의 차이점

개요 Spring 프레임워크는 어플리케이션을 개발할 때 필요한 수많은 강력하고 편리한 기능을 제공해준다. 하지만 많은 기술이 존재하는 만큼 Spring 프레임워크를 처음 사용하는 사람이 Spring 프레�

suhwan.dev

https://ict-nroo.tistory.com/117

vi ~/.bashrc

ㅎㅎ..

이렇게 간단한거였다니 ^^;

 

 

1. alias 전체 리스트 뽑을 때

alias

 

 

2. alias 만들때

test라고 alias를 만들어 주었다.

alisa test = "명령어"

 

3. alias 삭제

test란 alias 삭제

unalias test

 

4. alisa 영구등록

vi ~/.bashrc

 

첫번째 줄 이후에 해당 alias 복붙 

# .bashrc
alias test = "명령어"

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions
~

 

이후

source ~/.bashrc

 

하면 적용 완료

+ Recent posts