ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [mysql] grant,user,index,view
    SQL/MySQL 2021. 7. 24. 23:42

    grant : 권한설정

    GRANT 권한종류 ON 대상(DB.TABLE) TO '계정명'
    -- @'%' IDENTIFIED BY 암호 [WITH GRANT OPTION]; 이미 생성된 유저면 생략가능
    flush privileges;
    -- grant로 바로 생성 & 권한부여 다 가능(아래 예시)
    -- grant all on *.* to 'user1'@'%' identified by "1234";

    - 권한종류 (사용할 수 있는 SQL언어종류에 권한)

    all: 모든권한 가능

    select: select만 가능

    - on 대상 허용할 DB명.허용할 TABLE명

    on *.* = 모든 데이터베이스.모든 테이블

    - to 계정명

    to userID입력

    - flush privileges;

    grant,create 후 이 코드를 입력해야 적용이 됨

    >> 테스트1 (create + grant)

     

    create database db1;
    
    use db1;
    
    create user 'user1'@'%' identified by '1234';
    flush privileges;
    
    grant all on *.* to 'user1';
    flush privileges;

    위 grant확인을 위해 권한준 userID으로 접속해보자.

    >> cmd에서 확인

    /# mysql -u user1 -p 
    Enter password: 1234
    // 접속성공!
    
    use db1;
    // mysql에 만들어놓은 모든 database 접근 가능 확인
    create table tbl1
    (
    col1 int
    );
    
    desc tbl1;
    
    drop table tbl1;
    
    show tables;
    
    // database에 table 접근 가능 확인
    
    exit
    -- 확인 후 접속 끊기

    >> 테스트2 (grant)

     

    create database db1;
    
    use db1;
    
    create user 'user1'@'%' identified by '1234';
    flush privileges;

    revoke : 권한취소

     

    revoke 권한종류 on 대상(DB명.TABLE명) from '계정명';

    문법은 grant와 동일

    Workbench의 오류로 빨간색 떠있지만 무시하고 실행은 가능하다.

     

    >>테스트

    use db1;
    
    revoke all on *.* from 'user1';
    -- 에러떠있지만 실행하면 잘됨

    위 revoke 확인을 위해 권한을 제거한 userID으로 접속해보자.

    >> cmd에서 확인

    /# mysql -u user1 -p 
    Enter password: 1234
    //접속성공!
    
    use db1;
    //mysql에 만들어놓은 모든 database 접근 불가!!!!
    
    exit

    drop user: 계정삭제

    drop user '계정명';

    >> 테스트

    use db1;
    
    drop user 'user1';

    위 drop 확인을 위해 제거한 userID으로 접속해보자.

    >> cmd에서 확인

     

    /# mysql -u user1 -p 
    Enter password: 1234
    //접속실패!!!!

    select user: 유저목록 확인

    기본적으로 있는 mysql db에 user들이 들어간다.

    그러니 use mysql 로 들어가기

    show databases;
    
    use mysql;
    
    select user, host from user;
    -- 전체 유저 확인

    show grants for: 유저의 권한확인

     

    show grants for '계정명';
    -- grants: -s 붙여야 한다!

    INDEX

    추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조

    많은 양의 데이터 정렬: 문자 or 숫자순으로 정렬(같거나 비슷한 값은 붙어있기 때문에 데이터 확인시 속도가 빨라진다.)

    만약 index를 사용하지 않은 컬럼을 조회해야 하는 상황이라면 전체를 탐색하는 Full Scan을 수행해야 한다. Full Scan은 전체를 비교하여 탐색하기 때문에 처리 속도가 떨어진다.

    CREATE INDEX

    CREATE INDEX index_name
    ON table_name (column1, column2, ...);

    DROP INDEX

    인덱스 제거

    ALTER TABLE table_name
    DROP INDEX index_name;

    삽입/삭제 번번하면 index를 생성을 고려해야함!

    drop database if exists mydb1;
    create database mydb1;
    use mydb1;
    create table 회원
    (
    번호 int primary key auto_increment,
    성명 varchar(50),
    주민번호 varchar(100)
    );
    
    CREATE TABLE 게시물
    (
    번호 int primary key auto_increment,
    제목 varchar(20) not null ,
    내용 varchar(200) null ,
    작성자번호 int not null ,
    작성일 timestamp default current_timestamp,
    FOREIGN KEY(작성자번호) REFERENCES 회원(번호),
    UNIQUE (제목)
    );
    
    insert into 회원(성명,주민번호) values('가길동', '111');
    insert into 회원(성명,주민번호) values('나길동', '222');
    insert into 게시물(제목,내용,작성자번호) values('제목1', '내용1', 1);
    insert into 게시물(제목,내용,작성자번호) values('제목2', '내용2', 1);
    insert into 게시물(제목,내용,작성자번호) values('제목3', '내용3', 2);
    create index idx1 on 회원(성명);
    select * from 회원 where 성명 = '가길동'; 
    alter table 회원 drop index idx1;

    view

    create view

    : 가상테이블: 실제 x 테이블

    select 절의 복잡한 구조를 미리 담아놓고

    select * from view_name 으로 가져올 수 있다.

    CREATE VIEW view_name AS
    SELECT column1, column2, ...
    FROM table_name
    WHERE condition;
    
    SELECT * FROM view_name;

    drop view

    : view 지우기

    drop view view_name;

    create or replace view

    : 기존의 view를 다른 목록으로 바꾸기(있던 view_name을 다른 표로 대체)

    CREATE OR REPLACE VIEW view_name AS
    SELECT column1, column2, column3...
    FROM table_name
    WHERE condition;
    create view view1 as select * from 회원;
    select * from view1;
    drop view view1;

    'SQL > MySQL' 카테고리의 다른 글

    [mysql] if(),date(),Safe mode  (0) 2021.07.27
    [mysql] join,Aliases  (0) 2021.07.24
    [mysql] where,비교연산자,order by  (0) 2021.07.23
    [mysql] DDL,DML,제약조건  (0) 2021.07.23

    댓글

Designed by Tistory.