SQL - 기초지식, 사용자 권한 생성

솔비·2024년 1월 15일
0
post-thumbnail

DB (Data Base)


기업이나 조직 또는 개인이 필요에 의해 데이터를 일정한 형태로 저장해 놓은것.



DBMS


데이터를 관리, 복구해주는 소프트웨어



관계형 DB


서로간에 관계가 있는 데이터 테이블들을 모아놓은 데이터 저장공간



SQL


DB의 Data를 정의, 조작, 제어하기 위한 용어


1. 정의어 (DDL)

: 데이터베이스의 스키마를 정의하거나 수정하는 데 사용


  • CREATE : 테이블 생성
CREATE TABLE employees (	# 테이블명
    id INT PRIMARY KEY,		# 컬럼명,데이터유형,제약조건
    name VARCHAR(50),		# 컬럼명,데이터유형
    age INT,
    department VARCHAR(50)	# 컬럼명,데이터유형
);
  • ALTER : 테이블 수정
    • 테이블명 변경
    ALTER TABLE 테이블명 RENAME TO 바꿀테이블명
    • 컬럼 수정
    ALTER TABLE 테이블명 MODIFY (컬럼명,데이터유형,제약조건)
    • 컬럼 추가
    ALTER TABLE 테이블명 ADD (컬럼명,데이터유형,제약조건)
    • 컬럼 삭제
    ALTER TABLE 테이블명 DROP COLUMN 컬럼명 
    • 컬럼명 변경
     ALTER TABLE (테이블명) RENAME COLUMN 컬럼명 TO 새로운컬럼명
  • DROP : 테이블삭제
    • 테이블 구조와 데이터 모두 삭제
    DROP TABLE 테이블명 
    • 참조테이블 제약사항 모두 삭제
    DROP TABLE 테이블명 CASCADE CONSTRAINT

2. 조작어 (DML)

데이터베이스의 데이터를 조회, 삽입, 수정, 삭제하는 데 사용


  • SELECT : 데이터 조회
    SELECT column1, column2
    FROM table_name
    WHERE condition;
  • INSERT : 데이터 삽입
    INSERT INTO table_name (column1, column2)
    VALUES (value1, value2);
  • UPDATE : 데이터 수정
    UPDATE table_name
    SET column1 = value1, column2 = value2
    WHERE condition;
  • DELETE : 데이터 삭제
    DELETE FROM table_name
    WHERE condition;		
    #생략시 테이블 전체 데이터 삭제 (용량 초기화 x)

3. 제어어 (DCL)

데이터베이스의 데이터를 조회, 삽입, 수정, 삭제하는 데 사용


  • GRANT : 특정 권한을 부여
    GRANT SELECT, INSERT ON table_name TO user_name;
  • REVOKE : 특정 권한을 취소
    REVOKE DELETE ON table_name FROM user_name;

4. 트랜잭션 제어어 (TCL)

트랜잭션의 시작, 종료, 롤백 등을 제어하는 데 사용


  • COMMIT : 데이터베이스의 변경 사항을 영구적으로 저장
    COMMIT;
  • ROLLBACK : 트랜잭션을 취소하고 이전의 상태로 되돌림
    ROLLBACK;



실습


1. 현재 데이터베이스 목록 확인

show databases;



2. 데이터베이스 생성

create database test_db;



3. 데이터베이스 사용

use test_db

4. 데이터베이스 삭제

drop database test_db;


5. user 관리

  • 사용자 정보를 저장하는 mysql로 이동 후 조회
    mysql> use mysql;
    Database changed
    mysql> select host, user from user;
    +-----------+------------------+
    | host      | user             |
    +-----------+------------------+
    | localhost | mysql.infoschema |
    | localhost | mysql.session    |
    | localhost | mysql.sys        |
    | localhost | root             |
    +-----------+------------------+

🧷 외부접속가능 사용자와 비밀번호 생성

CREATE USER 'username'@'%' indentified by 'password'

🧷 현재 PC에서 접속가능 사용자와 비밀번호 생성

CREATE USER 'username'@'local host' indentified by 'password'

  • 내부pc에서 사용 접속가능한 사용자 noma와 비밀번호 1234 생성

    create user 'noma'@'localhost' identified by '1234';
    Query OK, 0 rows affected (0.03 sec)
    
    mysql> select host, user from user;
    +-----------+------------------+
    | host      | user             |
    +-----------+------------------+
    | localhost | mysql.infoschema |
    | localhost | mysql.session    |
    | localhost | mysql.sys        |
    | localhost | noma             |
    | localhost | root             |
    +-----------+------------------+
    5 rows in set (0.00 sec)
  • 외부접속 가능한 사용자 noma와 비밀번호 1234 생성

     create user 'noma'@'%' identified by '1234';
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> select host, user from user;
    +-----------+------------------+
    | host      | user             |
    +-----------+------------------+
    | %         | noma             |
    | localhost | mysql.infoschema |
    | localhost | mysql.session    |
    | localhost | mysql.sys        |
    | localhost | noma             |
    | localhost | root             |
    +-----------+------------------+
    6 rows in set (0.00 sec)

🧷 외부, 내부 접속이 다른경우 사용자명이 겹쳐도 됨


🧷 외부접속가능 사용자삭제

DROP USER 'username'@'%' 

🧷 현재 PC에서 접속가능 사용자삭제

DROP USER 'username'@'localhost'

  • 외부, 내부 접속 noma 사용자 삭제

     drop user 'noma'@'localhost';
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> select host, user from user;
    +-----------+------------------+
    | host      | user             |
    +-----------+------------------+
    | %         | noma             |
    | localhost | mysql.infoschema |
    | localhost | mysql.session    |
    | localhost | mysql.sys        |
    | localhost | root             |
    +-----------+------------------+
    5 rows in set (0.00 sec)
    
    mysql> drop user 'noma'@'%';
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> select host, user from user;
    +-----------+------------------+
    | host      | user             |
    +-----------+------------------+
    | localhost | mysql.infoschema |
    | localhost | mysql.session    |
    | localhost | mysql.sys        |
    | localhost | root             |
    +-----------+------------------+
    4 rows in set (0.00 sec)

6. user 권한 관리

  • 실습을 위한 testdb 데이터베이스 생성

     create database testdb;
    Query OK, 1 row affected (0.02 sec)
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    | testdb             |
    +--------------------+
    5 rows in set (0.00 sec)

  • user생성

     create user 'sxlbl'@'localhost' identified by '1234';
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> select host, user from user;
    +-----------+------------------+
    | host      | user             |
    +-----------+------------------+
    | localhost | mysql.infoschema |
    | localhost | mysql.session    |
    | localhost | mysql.sys        |
    | localhost | root             |
    | localhost | sxlbl            |
    +-----------+------------------+
    5 rows in set (0.00 sec)

🧷 사용자에게 부여된 권한 목록 확인

 SHOW GRANTS FOR 'username'@'localhost'

🧷 사용자에게 특정 데이터베이스의 모든 권한 부여

 GRANT ALL ON dbname.* TO 'username'@'localhost'

🧷 사용자에게 특정 데이터베이스의 모든 권한 삭제

 REVOKE ALL ON dbname.* FROM 'username'@'localhost'

# 권한목록 확인
show grants for 'sxlbl'@'localhost';
+-------------------------------------------+
| Grants for sxlbl@localhost                |
+-------------------------------------------+
| GRANT USAGE ON *.* TO `sxlbl`@`localhost` |
+-------------------------------------------+
1 row in set (0.00 sec)

#testdb의 모든 권한 부여
mysql> grant all on testdb.* to 'sxlbl'@'localhost';
Query OK, 0 rows affected (0.02 sec)

mysql> show grant for 'sxlbl'@'localhost';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'grant for 'sxlbl'@'localhost'' at line 1

# 권한부여 확인
mysql> show grants for 'sxlbl'@'localhost';
+-----------------------------------------------------------+
| Grants for sxlbl@localhost                                |
+-----------------------------------------------------------+
| GRANT USAGE ON *.* TO `sxlbl`@`localhost`                 |
| GRANT ALL PRIVILEGES ON `testdb`.* TO `sxlbl`@`localhost` |
+-----------------------------------------------------------+
2 rows in set (0.00 sec)

# testdb의 모든 권한 삭제
revoke all on testdb.* from 'sxlbl'@'localhost';
Query OK, 0 rows affected (0.02 sec)

# 권한삭제 확인
mysql> show grants for 'sxlbl'@'localhost';
+-------------------------------------------+
| Grants for sxlbl@localhost                |
+-------------------------------------------+
| GRANT USAGE ON *.* TO `sxlbl`@`localhost` |
+-------------------------------------------+
1 row in set (0.00 sec)

Daily Study Note
profile
Study Log

0개의 댓글