(1) MySQL 접속
(2) Database 확인
(3) Database 생성
(4) Database 사용 및 삭제
(5) Database USER 관리, USER 권한 및 삭제
% mysql -u root -p
Enter password:
% mysql -u root -p는 mysql에 접속하기 위해 사용자와 비밀번호를 입력하는 명령어이다.
%: 컴퓨터의 명령프롬프트에 명령어을 입력한다고 선언하는 것이다.mysql: 데이터베이스를 관리하는 DBMS 프로그램의 이름이다.-u root: 데이터베이스를 관리할 수 있는 권한을 가진 사용자이다. MYSQL은 기본적으로 사용자는 "root"로 지정되어 있다.-p: 비밀번호를 입력하는 명령어이다.Enter password: 이후 ENTER를 누르면 다음과 같이 비밀번호를 입력하라는 메시지가 나온다.SHOW DATABASES;
SHOW DATABASES; 명령어를 사용하면 현재 사용자가 접근할 수 있는 모든 데이터베이스 이름들의 목록을 볼 수 있다.
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test_db |
+--------------------+
CREATE DATABASE dbname;
CREATE DATABASE dbname; 명령어는 Database 이름을 지정해 새로운 Database 를 만드는 것이다.
mysql> CREATE DATABASE testdb;
Query OK, 1 row affected (0.01 sec)
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| testdb |
+--------------------+
5 rows in set (0.00 sec)
✏ Database 사용
mysql> USE dbname;
SQL은 DATABASE에서 관리하고 싶은 DATABASE가 있다면 USE dbname; 명령어를 사용하면 지정한 데이터 베이스내에 접속할 수 있다.
-예시
mysql> USE testdb;
Database changed
✏ Database 삭제
mysql> DROP DATABASE dbname;
삭제하고 싶은 DATABASE가 있다면 DROP DATABASE dbname; 명령어를 사용하면 지정한 데이터 베이스를 삭제할 수 있다.
mysql> DROP DATABASE testdb;
Query OK, 0 rows affected (0.02 sec)
#삭제한 database 목록 확인
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
✏ user 조회
MySQL에서 사용자 정보(user 정보)를 조회하려면 mysql Database로 이동한 후 관련 테이블에서 정보 조회가 가능하다.
mysql> USE mysql;
Database changed
이동한 이후 MySQL에서 사용자 정보(user 정보)를 조회하려면 mysql Database로 이동한 후 SELECT host, user FROM user; 명령어를 사용하면 mysql 내에 존재하는 user(사용자) 정보를 확인할 수 있다.
mysql> SELECT host, user FROM user;
+-----------+------------------+
| Host | User |
+-----------+------------------+
| localhost | root |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | debian-sys-maint |
+-----------+------------------+
4 rows in set (0.00 sec)
SELECT: SQL 쿼리의 시작 부분으로, 데이터베이스에서 데이터를 선택하고자 할 때 사용한다. 이 키워드는 다음에 오는 열(column)들을 데이터베이스에서 선택하도록 지시한다.
FROM: 이 키워드는 SELECT 키워드 다음에 오며, 데이터가 어디부터 선택될지를 지정한다. 즉, 데이터를 추출할 테이블을 지정한다.
host, user: 선택하고자 하는 열의 이름을 나열합니다. 여기서는 host와 user라는 두 열을 선택하겠다는 의미이다.
host: MySQL 데이터베이스의 user 테이블에서 호스트 정보를 포함하는 열이다. 이 열은 사용자가 접속할 수 있는 호스트 이름이나 IP 주소를 나타내준다.
user: MySQL 데이터베이스의 user 테이블에서 사용자 계정명을 포함하는 열이다. 이 열은 MySQL 서버에 정의된 사용자(user) 이름을 나타낸다.
-즉, 이 명령문 쿼리를 실행하면, MySQL 서버에 정의된 모든 사용자 계정과 해당 계정이 접속할 수 있는 호스트 정보를 보여준다.
✏ user 생성
CREATE USER 'username'@'localhost' identified by 'password';
+---------------------+---------------------------------+
| host | user |
+---------------------+---------------------------------+
| localhost | root |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | debian-sys-maint |
| localhost | username |
| % | mysql.infoschema |
+---------------------+---------------------------------+
CREATE USER: MySQL 데이터베이스에서 새로운 사용자를 생성하는 명령어이다.
'username'@'localhost': 새로 생성될 사용자의 이름과 접속 호스트를 지정한다.
'username': 새로 생성될 사용자의 이름입니다. 'username' 자리에 원하는 사용자 이름을 지정하면 된다.
'localhost': 사용자가 접속할 수 있는 호스트를 지정한다. localhost는 외부가 아닌 사용자 계정이 해당 컴퓨터 즉, 로컬에서만 접속할 수 있도록 설정하는 것이다.
IDENTIFIED BY 'password': 사용자의 비밀번호를 지정하는 것이다.'password' 자리에 비밀번호를 기입하고 명령문을 실행한다. 이 비밀번호를 사용하여 해당 사용자가 MySQL에 로그인할 수 있다.
즉 해당 명령문 및 쿼리는 현재 PC 에서만 접속 가능한 사용자를 비밀번호와 함께 생성해준다.
✏ user 생성 <외부>
CREATE USER 'username'@'%' identified by 'password';
+---------------------+--------------------------------+
| host | user |
+---------------------+--------------------------------+
| % | username |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | username |
+---------------------+--------------------------------+
CREATE USER: MySQL 데이터베이스에서 새로운 사용자를 생성하는 명령어이다.
'username'@'%': 외부에서 접속 가능한 사용자를 생성하기 위한 명령어이다. 새로 생성될 사용자의 이름과 접속 호스트를 지정한다.
'username': 새로 생성될 사용자의 이름입니다. 'username' 자리에 원하는 사용자 이름을 지정하면 된다.
'%': 와일드카드 문자로, 모든 호스트에서 접속할 수 있음을 의미합니다. 즉, username 사용자는 어떤 호스트에서든 MySQL 서버에 접속할 수 있습니다.
IDENTIFIED BY 'password': 사용자의 비밀번호를 지정하는 것이다.'password' 자리에 비밀번호를 기입하고 명령문을 실행한다. 이 비밀번호를 사용하여 해당 사용자가 MySQL에 로그인할 수 있다.
즉 해당 명령문 및 쿼리는 username 이라는 해당 사용자 계정이 외부 호스트에서도 MySQL서버에 접속할 수 있게 설정한다는 의미이다.
✏ user 삭제
DROP USER 'username'@'%';
DROP USER 'username'@'localhost' ;
DROP USER 구문은 MySQL에서 특정 호스트에 대한 사용자 계정을 삭제하도록 해준다. ✏ user 권한 조회 및 부여
SHOW GRANTS FOR `username`@`localhost`;
+---------------------+--------------------------------+
| Grants for username@localhost |
+---------------------+--------------------------------+
| GRANT USAGE ON *.* TO 'username'@'localhost' |
+---------------------+--------------------------------+
1 row in set (0.00 sec)
GRANT ALL ON testdb.* to 'username'@'localhost';
+---------------------+---------------------------------------+
| Grants for username@localhost |
+---------------------+---------------------------------------+
| GRANT USAGE ON *.* TO 'username'@'localhost' |
| GRANT ALL PRIVILEGES ON 'testdb'* TO 'username`@`localhost' |
+---------------------+---------------------------------------+
2 row in set (0.00 sec)
GRANT ALL: MySQL에서 사용자에게 권한을 부여하는 쿼리이다. ALL은 모든 권한을 의미하며 사용자에게 testdb 데이터베이스에 대한 모든 권한을 부여한다는 것이다.
ON testdb.*: 권한을 부여할 데이터베이스와 테이블을 지정한다. testdb.*는 testdb 데이터베이스의 모든 테이블에 대한 권한을 부여함을 의미한다. 여기서*는 모든 테이블을 의미하며 모든 테이블을 지정할 때 사용한다.
TO 'username'@'localhost': 권한을 받을 사용자와 호스트를 지정합니다.
'username'은 권한을 받을 사용자의 이름입니다.
해당 구문은 'username' 사용자에게 localhost에서 testdb 라는 데이터베이스의 모든 테이블에 대한 모든 권한을 부여하도록 해주는 쿼리이다.
✏ user 권한 조회 및 부여
REVOKE ALL ON testdb.* to 'username'@'localhost';
+---------------------+--------------------------------+
| Grants for username@localhost |
+---------------------+--------------------------------+
| GRANT USAGE ON *.* TO 'username'@'localhost' |
+---------------------+--------------------------------+
1 row in set (0.00 sec)
해당 구문은 'username' 사용자에게 localhost에서 testdb 라는 데이터베이스의 모든 테이블에 대한 모든 권한을 삭제해도록 해주는 쿼리이다. 데이터베이스를 조회해보면 GRANT ALL PRIVILEGES ON 'testdb'* TO 'username@localhost' 라고 적혀 있던 권한이 삭제된 것을 볼 수 있다.
FLUSH PRIVILEGES; : 권한 수정내용이 적용이 잘 되지 않았을 경우 FLUSH PRIVILEGES; 구문을 실행하면 수정내용이 새로고침되어 적용된다.