2014년 9월 9일 화요일

MYSQL - Grant

Mysql Grant에 대해서..

문법은

GRANT
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    TO user_specification [, user_specification] ...
    [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
    [WITH with_option ...]

object_type:
    TABLE
  | FUNCTION
  | PROCEDURE

priv_level:
    *
  | *.*
  | db_name.*
  | db_name.tbl_name
  | tbl_name
  | db_name.routine_name

user_specification:
    user [IDENTIFIED BY [PASSWORD] 'password']

ssl_option:
    SSL
  | X509
  | CIPHER 'cipher'
  | ISSUER 'issuer'
  | SUBJECT 'subject'

with_option:
    GRANT OPTION
  | MAX_QUERIES_PER_HOUR count
  | MAX_UPDATES_PER_HOUR count
  | MAX_CONNECTIONS_PER_HOUR count
  | MAX_USER_CONNECTIONS count

mysql> GRANT ALL PRIVILEGES on *.* to 'id'@'hosts' identified by '패스워드;

*.* 은. DB명.Table명 쯤 된다 전체다주고 싶으니 *.*
'id' @ 'hosts' id계정에 hosts에서 접속한녀석에게 해당된다는 얘기
(id는 알아서 주면 될테고 hosts는 %로 줄때 어디서 접속하든이 될것임)

권한을 골라서 줄수가 있음
ALL 대신에 select, insert, delete, update 엄청 많으니 표를 참조
Table 13.1 Permissible Privileges for GRANT and REVOKE
PrivilegeMeaning and Grantable Levels
ALL [PRIVILEGES]Grant all privileges at specified access level except GRANT OPTION
ALTEREnable use of ALTER TABLE. Levels: Global, database, table.
ALTER ROUTINEEnable stored routines to be altered or dropped. Levels: Global, database, procedure.
CREATEEnable database and table creation. Levels: Global, database, table.
CREATE ROUTINEEnable stored routine creation. Levels: Global, database.
CREATE TEMPORARY TABLESEnable use of CREATE TEMPORARY TABLE. Levels: Global, database.
CREATE USEREnable use of CREATE USERDROP USERRENAME USER, and REVOKE ALL PRIVILEGES. Level: Global.
CREATE VIEWEnable views to be created or altered. Levels: Global, database, table.
DELETEEnable use of DELETE. Level: Global, database, table.
DROPEnable databases, tables, and views to be dropped. Levels: Global, database, table.
EVENTEnable use of events for the Event Scheduler. Levels: Global, database.
EXECUTEEnable the user to execute stored routines. Levels: Global, database, table.
FILEEnable the user to cause the server to read or write files. Level: Global.
GRANT OPTIONEnable privileges to be granted to or removed from other accounts. Levels: Global, database, table, procedure.
INDEXEnable indexes to be created or dropped. Levels: Global, database, table.
INSERTEnable use of INSERT. Levels: Global, database, table, column.
LOCK TABLESEnable use of LOCK TABLES on tables for which you have the SELECT privilege. Levels: Global, database.
PROCESSEnable the user to see all processes with SHOW PROCESSLIST. Level: Global.
REFERENCESNot implemented
RELOADEnable use of FLUSH operations. Level: Global.
REPLICATION CLIENTEnable the user to ask where master or slave servers are. Level: Global.
REPLICATION SLAVEEnable replication slaves to read binary log events from the master. Level: Global.
SELECTEnable use of SELECT. Levels: Global, database, table, column.
SHOW DATABASESEnable SHOW DATABASES to show all databases. Level: Global.
SHOW VIEWEnable use of SHOW CREATE VIEW. Levels: Global, database, table.
SHUTDOWNEnable use of mysqladmin shutdown. Level: Global.
SUPEREnable use of other administrative operations such as CHANGE MASTER TOKILLPURGE BINARY LOGSSET GLOBAL, and mysqladmin debug command. Level: Global.
TRIGGEREnable trigger operations. Levels: Global, database, table.
UPDATEEnable use of UPDATE. Levels: Global, database, table, column.
USAGESynonym for no privileges


// 아래 부분은 예시로 편하게 볼수 있게 정리되어있다고 판단하여 정리
//
mysql> GRANT ALL PRIVILEGES ON db_name.* TO 'monty'@'localhost'
    ->     IDENTIFIED BY 'some_pass' WITH GRANT OPTION;

// 모든 호스트(%)에서 연결을 허용
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     IDENTIFIED BY 'some_pass' WITH GRANT OPTION;

// domain.com 도메인에 속한 모든 호스트로부터 연결 허용
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%.domain.com'
    ->     IDENTIFIED BY 'some_pass' WITH GRANT OPTION;

// mysqladmin reload, mysqladmin refress, mysqladmin processlist
// 등의 명령을 실행하도록 admin 유저에게 권한 부여
mysql> GRANT RELOAD, PROCESS ON *.* TO 'admin'@'localhost';

mysql> GRANT USAGE ON *.* TO 'dummy'@'localhost';

// 현재 GRANT 된 상태 보기
mysql> SHOW GRANTS FOR 'root'@'localhost';

// 현재 연결된 사용자의 GRANT 상태 보기
mysql> SHOW GRANTS FOR CURRENT_USER;


2014년 6월 10일 화요일

MYSQL - SHOW Syntax


자주 쓰는 편인것;
13.7.5.5 SHOW COLUMNS Syntax
SHOW [FULL] COLUMNS {FROM | IN} tbl_name [{FROM | IN} db_name]
    [LIKE 'pattern' | WHERE expr]

13.7.5.10 SHOW CREATE TABLE Syntax
SHOW CREATE TABLE tbl_name

13.7.5.38 SHOW VARIABLES Syntax
SHOW [GLOBAL | SESSION] VARIABLES
    [LIKE 'pattern' | WHERE expr]


http://dev.mysql.com/doc/refman/5.7/en/show.html

2014년 5월 27일 화요일

MYSQL - ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

원격지에서 mysql에 붙으려 했는데..

저 에러가 떨어졌음. -_-;

다른 여러 검색 가능한 케이스들이 있지만..


우분투 였고
/etc/hosts.allow 파일에

mysqld:ALL

넣고 퉁쳤음.


기타

grant all privileges on *.* to 'root'@'%' identified by 'root의 패스워드';
flush privileges;

위에 사항으로 처리하는 것도 있고.

my.cnf 에
bind-address           = 127.0.0.1

를 주석 치는걸로 처리하는 경우도 있음.

2014년 5월 20일 화요일

MYSQL - ERROR 1005 (errno: 150)

1. FOREIGN KEY는 PRIMARY KEY의 자료형과 동일 해야함
: PK가 Unsigned INT이고 FK가 INT이면 errno:150임

2. FOREIGN KEY와 PRIMARY KEY 둘다 INNODB 이어야만 함

3. 그렇지 않은데도 에러라면 FOREIGN KEY 사용 레퍼런스를 참조할것


FOREIGN KEY  사용에 대한 레퍼런스

2014년 5월 13일 화요일

curl 을 이용하여 json restful api test 해 보기

멀더의 IT 개발자 블로그 에서 퍼옴
http://windowx.tistory.com/entry/curl-을-이용하여--json-restful-api-test-해-보기


curl 을 잘 이용하면  restful api 테스트에 용이 합니다. 아래의 sample 을 참고 바랍니다.

curl -i -v -X POST --cookie "cookiename1=cookievalue1; cookiename2=cookievalue2"  -H "Content-Type:application/json"  http://localhost:8080/api/url -d  '{"name01":"value01","name02":"value02"}'


수신도 json 형식으로 받을려면 : -H "Accept: application/json" 추가 함
curl -i -v -X POST --cookie "cookiename1=cookievalue1; cookiename2=cookievalue2"  -H "Content-Type:application/json" -H "Accept: application/json"  http://localhost:8080/api/url -d  '{"name01":"value01","name02":"value02"}'


parameter : 
-i : 헤더를 출력한다
-v : 상세로그를 출력한다.
-X : POST/GET 등 메소드를 지정한다.
--cookie : header 에 쿠키를 추가 한다
-d:  POST form  value를 추가 한다.



내가 썼던것은
curl -i -v -X POST http://10.6.4.107/sp/app/auth/login.php -d '{"udid":"UDID","os":"1","phone":"PhoneNumber"}'
이정도의 가벼운 느낌으로 함.

2014년 5월 11일 일요일

MYSQL - enum

MYSQL의 데이터 형식중에 enum이 존재하는데
비슷한 녀석으로 SET도 있음

최대 65535개의 엘리먼트를 가질 수 있음.

인덱스를 사용, 인덱스는 1부터 시작됨


CREATE TABLE TEST
(
eRecoveryType ENUM('Hungry','Thirst','Clean','Felling','Energy')
eRecoveryValue int
)

INSERT INTO TEST VALUES ('Hungry', 100)
INSERT INTO TEST VALUES (2, 50)

select * from TEST;
--------------------------------------------
Hungry 100
Thirst 50
--------------------------------------------

select * from TEST where eRecoveryType = 1
--------------------------------------------
Hungry 100
--------------------------------------------

맞지 않는 값을 삽입하면 빈 문자열('')이 삽입된다.
그경우 0번 인덱스가 됨

NULL 도 삽입 가능함


이넘값에 +0 이라고 적은경우 해당 인덱스가 표시됨
select eRecoveryType , eRecoveryType +0, eRecoveryValue from TEST
--------------------------------------------
Hungry 1 100
Thirst 2 50
--------------------------------------------



에 대한 예제
http://dev.mysql.com/doc/refman/5.6/en/enum.html

ValueIndex
NULLNULL
''0
'Mercury'1
'Venus'2
'Earth'3
이런 느낌의 데이터.. 


2014년 5월 7일 수요일

MYSQL - Log (general_log)

언제 부터 인지 모르지만 일반 log 옵션이 general_log로 바뀐다고 워닝으로 본듯



[현재 서버 변수 값 확인]
mysql> show variables where Variable_name in ('version', 'log', 'general_log', 'general_log_file', 'log_output');
+------------------+--------------------------------------+
| Variable_name    | Value                                |
+------------------+--------------------------------------+
| general_log      | OFF                                  | // 로그 비활성화 상태
| general_log_file | /var/run/mysqld/mysqld.log           |
| log              | OFF                                  |
| log_output       | FILE                                 |
| version          | 5.1.73                               |
+------------------+--------------------------------------+
5 row in set (0.00 sec)


[로그 활성화 하기]
mysql> set global general_log = 1;
Query OK, 0 rows affected (0.00 sec)




[로그 파일이 쌓는 방식 선택]
mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+
1 row in set (0.00 sec)
// 로그 쌓는 방식을 "FILE" 혹은 "TABLE" 둘 중 한가지 방식으로 선택 할 수 있다.(둘다도 가능)



[로그 파일이 테이블에 쌓이는 방식 선택]
mysql> set global log_output='TABLE';
Query OK, 0 rows affected (0.00 sec)



[로그 파일이 파일,테이블 둘다 쌓이 방식 선택]
mysql> set global log_output='TABLE,FILE';
Query OK, 0 rows affected (0.00 sec)



[테이블에 실행한 쿼리 기록]
mysql> select * from mysql.general_log limit 1;