[ server ][ mysql ] 사용자 계정 권한 추가, 수정, 삭제 CentOS7 mysql 접속, 계정 생성, 권한 설정
페이지 정보
작성자 웹지기 댓글 0건 조회 14,792회 작성일 18-12-14 15:21본문
# mysql -uroot -p
#Enter password:
#Welcome to the MariaDB monitor. Commands end with ; or \g.
#Your MariaDB connection id is 9145
#Server version: 10.3.13-MariaDB MariaDB Server
#
#Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
#
#Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
#
#MariaDB [(none)]>
mysql에 접속을 했으면 다음으로 mysql database를 선택한다.
# use mysql;
#Reading table information for completion of table and column names
#You can turn off this feature to get a quicker startup with -A
#Database changed
#MariaDB [mysql]>
mysql database의 스키마 구성을 확인해보자.
# show tables;
여기서 user라고 되어 있는 부분이 사용자 계정이 정의된 table이다.
계정 정보를 조회하고 계정을 만들자.
# select host, user from user;
현재 계정은 하나고 접속할 수 있는 곳은 localhost 와 127.0.0.1 뿐이다.
다음으로 계정을 만든다.
계정을 만들때 각각의 아이피로 해야 한다. localhost 와 127.0.0.1 또는 일반아이피 모두 따로 넣어주어야 한다(동시 입력 불가)
명령 : create user <계정명>@'<원하는 호스트>' identified by '<암호>'
- 호스트 부분에 들어갈 수 있는 것
localhost, 127.0.0.1 = 자신
% = 모두허용
공인아이피 = 해당아이피만
# create user test@localhost identified by '1234567890';
# select host, user from user;
test 계정이 localhost로 추가된 것을 볼 수가 있다.
이는 localhost에서만 허용되므로 외부에서 접속을 하려면 localhost 대신 % 로 설정 한다.
이번에는 외부접속이 가능한 test계정을 만든다.
# create user test@'%' identified by '1234567890';
이제 test 계정의 host가 %(외부접속)과 localhost 두개가 되었다.
외부접속시 % 부분을 192.168.%로 설정하면 192.168.xxx.xxx에서 접속이 가능하는 의미.
계정삭제는 지우고 싶은 조건이 맞지 않으면 해당 계정이 모두 삭제 되니 주의.
test계정의 localhost 계정의 삭제를 원하면
# delete from user where user='test' and host='localhost';
이처럼 정확한 조건이 필요하다.
# delete from user where user='test';
쿼리를 날리면 test에 해당하는 2개의 계정이 모두 사라진다.
test user의 2개의 host가 삭제가 되었다.
데이터베이스(스키마) 권한 제어에는 SQL 명령어 중 DCL (Data Control Language) 이 사용된다.
*DCL 종류에는 GRANT 와 REVOKE 이 있다. (두가지 모두 유효하다.)
# create database test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
//또는
# create schema test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
스키마에 접근 가능한 계정을 만들어 보자.
//사용자의 권한을 확인한다
# show grants for test@localhost;
//<dbname>.<table> 부분에 *.* 을 넣게 되면 root 계정의 권한과 같아진다.(모든기능)
# grant all privileges on <dbname>.<table> to <userid>@<host> identified by '<password>' ( with <grant option> );
# grant all privileges on test.* to test@localhost identified by '1234567890';
//해당 계정 권한을 test database(스키마)에 모든 테이블에서 select, insert, update, delete 할 수 있게 주었다.
# grant select on <dbname>.<table> to <userid>@<host> identified by '<password>' ( with <grant option> );
# grant select on test.* to test@'%' identified by '1234567890';
//해당 계정 권한을 test database(스키마)에 모든 테이블에서 select 할 수 있게 주었다.
//권한 적용 령명
# flush privileges;
//권한 여부 확인
# show grants for test@localhost;
//부여된 권한 삭제
# revoke all on test.* from test@localhost;
//권한 삭제 여부 확인
# show grants for test@localhost;
//사용자 계정 삭제
# DROP USER [user명]@[server명];
ex) drop user user1@localhost;
Root의 권한은 외부에서 접속하는 부분을 추천하지 않는다
먼저 계정 root계정과 같은 외부에서 접속가능한 계정을 만든다.
다음으로 권한에 대한 설정을 해준다.
//계정생성
# create user root@'%' identified by '1234567890(패스워드)';
//관리자의 권한에 해당하는 모든 기능
# GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'root'@'%' ;
//관리자의 권한에 해당하는 grant기능
# GRANT GRANT OPTION ON *.* TO 'root'@'%' ;
//한줄로 간단하게 모든기능을 넣자
# grant all privileges on *.* to root@'%' identified by '1234567890(root비밀번호)' with grant option;
권한(GRANT)
Privilege | Meaning |
---|---|
ALL [PRIVILEGES] | GRANT OPTION을 제외한 모든 권한. |
ALTER | ALTER TABLE을 할 수 있는 권한. |
ALTER ROUTINE | stored routines을 alter하고 drop할 수 있는 권한. |
CREATE | database와 table을 생성할 수 있는 권한. |
CREATE ROUTINE | stored routine을 생성할 수 있는 권한. |
CREATE TEMPORARY TABLES | CREATE TEMPORARY TABLE을 사용할 수 있는 권한. |
CREATE USER | CREATE USER, DROP USER, RENAME USER 과 REVOKE ALL PRIVILEGES을 사용할 수 있는 권한. |
CREATE VIEW | views 를 생성하고 alter할 수 있는 권한. |
DELETE | DELETE 할 수 있는 권한. |
DROP | databases, tables, 그리고 views를 drop할 수 있는 권한. 파티션 테이블에 대한 ALTER TABLE ... DROP PARTITAION 구문도 사용할 수 있게 해주는 권한 TRUNCATE TABLE 도 DROP권한이 있어야 사용이 가능. |
EVENT | Event Scheduler를 위해 event를 사용할 수 있는 권한. |
EXECUTE | stored routines를 실행할 수 있는 권한. |
FILE | 서버에 생성된 파일을 읽고 쓸 수 있는 권한. LOAD DATA INFILE과 SELECT .... INTO OUTFILE 을 사용할 수 있게 해주는 권한. |
GRANT OPTION | 다른 계정에 grant를 하고 권한을 revoke할 수 있는 권한. |
INDEX | 인덱스를 생성하고 drop할 수 있는 권한. |
INSERT | INSERT 구문을 사용할 수 있는 권한. |
LOCK TABLES | SELECT 권한을 가진 테이블에 LOCK TABLES를 할 수 있는 권한. |
PROCESS | 모든 프로세스를 볼 수 있게 SHOW PROCESSLIST를 할 수 있는 권한. 이 권한이 없는 경우 자신의 계정에 대한 것만 확인. PROCESS권한이 있으면 패스워드 세팅 및 수정 가능. |
REFERENCES | 아직 정의되지 않음. |
RELOAD | FLUSH구문을 사용할 수 있는 권한. |
REPLICATION CLIENT | Enable the user to ask where master or slave servers are |
REPLICATION SLAVE | Enable replication slaves to read binary log events from the master |
SELECT | SELECT할 수 있는 권한. |
SHOW DATABASES | 모든 데이터베이스에 대해 SHOW DATABASES를 할 수 있는 것. 이 권한이 없는 경우 자신의 계정에 대한 것만 확인. |
SHOW VIEW | SHOW CREATE VIEW를 사용할 수 있는 권한. |
SHUTDOWN | mysqladmin shutdown을 할 수 있는 권한. |
SUPER | CHANGE MASTER TO,KILL,PURGE BINARY LOGS와 SET GLOBAL문장을 실행할 수 있는 권한. |
TRIGGER | trigger를 생성하고 drop할 수 있는 권한. |
UPDATE | UPDATE 할 수 있는 권한. |
USAGE | no privileges의 Synonym으로 접속만 가능한 계정의 권한. |
댓글목록
등록된 댓글이 없습니다.