-
사용자 권한 설정하기
서론이제 사용자도 만들어보고, 데이터 베이스도 만들어 봤으니사용자에게 쥐어질 키인 권한 설정을 해보자. 권한 부여권한 설정 귀찮다고 막 주면 나중에 문제가 발생 할 수 있다.이점을 유의하여, 사용자 별로 목적을 감안하여 설정하는 것이 좋겠다.규칙은 다음과 같다. 생성 규칙은 다양한데 그중 쓰기 편한거 기준으로 설명한다.sqlgrant all privileges on 데이터베이스명.테이블명 to 사용자 위 규칙대로 변환하여 실행하면 다음과 같다.sqlmysql grant all privileges on store. to testERROR 1410 42000 You are not allowed to create a user with GRANT해석은 이와 같다.store 라는 데이터베이스의 존재하는 모든 테이블에 대해 권한을 부여하며, 대상은 test 계정이며 해당 게정의 생성을 동시에 한다.여기서 뭔가 이상한게 눈에 띈다.에러가 발생했댄다.권한 부여와 사용자 생성을 같이 할 수 없댄다.MYSQL 8.0 버전에서는 권한 부여와 사용자 생성을 동시에 할 수 없다.반면 MYSQL 5.7 버전에서는 가능한 로직이다.자 이제 필자의 버전은 상위 버전이므로 지난번 해본 사용자를 먼저 만들어보자.sqlmysql CREATE USER user1 identified by user1pwQuery OK, 0 rows affected 0.01 secuser1 이라는 계정을 만들었으니 이제 다시 문법을 조금 수정하여 권한을 부여해보자.sqlmysql grant all privileges on store. to user1Query OK, 0 rows affected 0.01 secsqlmysql show grants for user1 Grants for user1GRANT USAGE ON . TO user1 GRANT ALL PRIVILEGES ON store. TO user1 2 rows in set 0.00 sec이제야 성공이 되었다.sqlmysql flush privilegesQuery OK, 0 rows affected 0.00 sec권한변경 사항을 적용하기 위해 위 명령도 까먹지 말자. 권한 제거이제 권한을 줬다가 뺐을 시간이다.규칙은 다음과 같다.권한을 주던 명령에서 맨앞 grant를 살포시 revoke 로 변경 해보자그 다음 to from 으로 해보자sqlrevoke all privileges on 데이터베이스명.테이블명 from 사용자 sqlmysql revoke all privileges on store. from user1Query OK, 0 rows affected 0.01 secsqlmysql show grants for user1 Grants for user1 GRANT USAGE ON . TO user1 1 row in set 0.00 sec아주 휼륭하게 제거 되었다.
2024-08-20 16:47:34
Public
-
데이터베이스 다루기
서론SQL 서버를 설치 해보았으니 이제는 활용할 DB데이터베이스를 만들어 보자. 데이터베이스먼저 현재 상태를 한번 확인해보자.sqlmysql show databases Databaseinformationschema mysql performanceschema sys4 rows in set 0.00 sec당연한 소리겠지만 초기 상태이다. 지금 보이는 목록은 SQL 서버를 설치하면서 자동적으로 생성된거니 가볍게 무시하자.이제 샘플로 DB 하나를 만들어보자.sqlmysql create database storeQuery OK, 1 row affected 0.00 secstore 이라는 이름을 가진 DB를 만들었다.다시 한번 현황을 살펴보자sqlmysql show databases Databaseinformationschema mysql performanceschema store sys5 rows in set 0.00 sec역시 문제 없이 잘 생성되었다. 테이블DB 는 만들었으니 이제 DB에 뭔가 메뉴판 같은 목록이 있어야 하지 않겠는가store 라는 이름으로 만들었으니 예시로 menu 라는 테이블을 만들어 보겠다.메뉴라고 하니 어떤 내용이 필요할지 생각해보자. 상품명 가격 제조일자이 정도의 정보를 담는다 가정하자.먼저 데이터베이스를 선택 해야한다.sqlmysql use storeDatabase changed이제 위 조건으로 테이블을 한번 만들어보자sqlmysql create table menu idx int primary key AUTOINCREMENT comment 인덱스 번호, name varchar10 not null comment 제품명, price int not null comment 제품가격, makedate datetime default CURRENTTIMESTAMP not null comment 제조일자 Query OK, 0 rows affected 0.03 sec설정한 내용을 분석해보자. idx 라는 항목을 정수형으로 만들었으며, 고유 키, 자동 증분 옵션을 추가했다. name 이라는 항목은 최대 10글자의 문자열을 담을 수 있으며, null 값일 수 없다. price 는 정수값이며, null 값일 수 없다. makedate 는 날짜 형식이며, 기본 값으로 데이터 입력 시 그 당시 시간을 자동으로 남긴다.한번 테이블을 확인해보자.sqlmysql show tables Tablesinstore menu1 row in set 0.01 sec 잘 만들어 졌다.이제 속성을 한번 보자.sqlmysql show columns from menu in store Field Type Null Key DefaultExtra idxint NOPRI NULL autoincrement name varchar10 NO NULL price int NO NULL makedate datetime NO CURRENTTIMESTAMP DEFAULTGENERATED 4 rows in set 0.01 sec위와 같이 조회하는 조건을 설명하면 다음과 같다.sqlshow columns from 테이블명 in 데이터베이스명의도한 대로 잘 만들어져 있다.참고로 작성한 코멘트를 보려면 다음과 같다.sql 규칙select 뽑을내용 from informationschema.columns where tableschema데이터베이스명 and tablename테이블명sqlmysql select tablename, columnname, columncomment from informationschema.columns where tableschemastore and tablenamemenu TABLENAME COLUMNNAME COLUMNCOMMENTmenuidx 인덱스 번호 menumakedate제조일자 menuname 제품명menuprice제품가격 4 rows in set 0.00 sec 삭제해당 작업은 주의를 요한다.실수 한번으로 모든 데이터가 사라질 수 있는 위험한 작업이다.만들어 봤으니 삭제도 해봐야겠지 않겠는가규칙은 다음과 같다.sqldrop 종류 대상명자 먼저 테이블을 삭제해보자.sqmysql drop table menuQuery OK, 0 rows affected 0.02 sec다음으로 데이터 베이스를 삭제 해보자sqlmysql drop database storeQuery OK, 0 rows affected 0.01 sec지금 까지 데이터베이스를 다루는 기초를 알아보았다.끝
2024-08-20 16:16:00
Public
-
사용자 생성 및 삭제
서론이전 단계에서 설치를 해보았으니 이젠 계정을 한번 다뤄보자. 관리자 설정자 이제 가장 먼저 관리자 설정을 해보자.뭔가를 설정하려면 일단 mysql 서버로 접근을 해야하지 않겠는가 아래처럼 접근을 먼저 해보자sql sudo mysql u rootWelcome to the MySQL monitor. Commands end with or g.Your MySQL connection id is 8Server version 8.0.390ubuntu0.22.04.1 UbuntuCopyright c 2000, 2024, Oracle andor its affiliates.Oracle is a registered trademark of Oracle Corporation andor itsaffiliates. Other names may be trademarks of their respectiveowners.Type help or h for help. Type c to clear the current input statement.mysqlmysql에 접근을 했으니 사용자를 한번 확인해보자.sqluse mysqlmysql 테이블 사용하기sqlselect host, user, plugin, authenticationstring from user사용자 조회하기sqlmysql use mysqlReading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with ADatabase changedmysql select host, user, plugin, authenticationstring from user host user plugin authenticationstring localhost debiansysmaint cachingsha2password A005,s6Vchnwov8WkAeqHnL1slM2xBRYve5RkAzFUOIOOIWPoevd11xF6. localhost mysql.infoschema cachingsha2password A005THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED localhost mysql.session cachingsha2password A005THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED localhost mysql.sys cachingsha2password A005THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED localhost root authsocket 5 rows in set 0.00 secmysql사실 처음 mysql 서버를 시작하고 사용자 확인은 할 필요 없다.뭐 아무것도 안했는데 굳이 아무튼 이제는 보안상 root 비밀번호를 선행적으로 생성하고 적용할 것이다.sqlmysql ALTER USER rootlocalhost IDENTIFIED BY adminpwQuery OK, 0 rows affected 0.00 secmysql FLUSH PRIVILEGESQuery OK, 0 rows affected 0.00 secroot 계정에 adminpw 라는 비밀번호를 설정하였다.FLUSH PRIVILEGES 는 변경된 권한 사항을 즉시 적용하는 명령어이다.물론 root 계정을 가지고도 외부에서 접속할 수 있다.하지만, 이건 너무 위험한 행동이 아닌가 예를 들어 내가 호텔 주인장인데, 손님한테 마스터키를 쥐어준 셈이다.고로 외부 사용 시 전용으로 사용할 계정을 만들어야 한다. 사용자 설정규칙은 다음과 같다.sqlCREATE USER 계정명 identified by 비밀번호sqlmysql CREATE USER tast identified by userpwQuery OK, 0 rows affected 0.01 sec자 tast라는 이름을 가졌으며, userpw 비밀번호를 사용하며, 외부 접속이 가능한 사용자가 생성되었다. 의미가 바로 외부 사용이 가능 여부이다.만약localhost 였다면 내부 사용만 가능 하다는 의미이다.다시 한번 사용자를 확인해보자sqlmysql select host, user, plugin, authenticationstring from user host user plugin authenticationstring tast cachingsha2password A005xcxbHlYv3jQ1JtySfgicqLSF9v3R4yFQ7mTWlU.XiUTJG2h1K8. localhost debiansysmaint cachingsha2password A005,s6Vchnwov8WkAeqHnL1slM2xBRYve5RkAzFUOIOOIWPoevd11xF6. localhost mysql.infoschema cachingsha2password A005THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED localhost mysql.session cachingsha2password A005THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED localhost mysql.sys cachingsha2password A005THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED localhost root authsocket 6 rows in set 0.00 sec정상적으로 생성된 것을 볼 수 있다.근데 한 가지 문제가 발생했다.나는 test 라는 이름을 가진 사용자를 만들려 했는데 tast 라고 오타가 났다.이제 사용자를 한번 삭제해보자. 사용자 삭제사용자 이름을 직접 삭제할 수도 있고, 조건을 걸어 사용자를 찾아 삭제할 수도 있다.sqlmysql drop user tastQuery OK, 0 rows affected 0.00 sectast 라는 사용자를 바로 지운다.sqlmysql delete from user where usertastQuery OK, 1 row affected 0.01 sectast라는 사용자를 user 목록에서 찾아 지운다.둘 중 뭐든 결과는 같다.sqlmysql select host, user, plugin, authenticationstring from user host user plugin authenticationstring localhost debiansysmaint cachingsha2password A005,s6Vchnwov8WkAeqHnL1slM2xBRYve5RkAzFUOIOOIWPoevd11xF6. localhost mysql.infoschema cachingsha2password A005THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED localhost mysql.session cachingsha2password A005THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED localhost mysql.sys cachingsha2password A005THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED localhost root authsocket 5 rows in set 0.00 sec다시 확인해보면 위처럼 tast 라는 양반이 사라진 것을 볼 수 있다.
2024-08-19 22:52:24
Public
-
mysql-server 설치하기
설치bash sudo aptget install mysqlserver설치 자체는 매우 간단하다. 위와 같이 단 한 줄로 끝난다.이후 시스템이 재시작 되어도 자동으로 mysql 서버가 켜지기 위해서 서비스를 활성화 시켜준다.참고로 mysqlserver 설치시 systemed 에 자동으로 서비스 등록까지는 되어 있다.고로 아래와 같이 활성화만 시켜준다.bash sudo systemctl enable mysql.servicebash sudo systemctl status mysql.service mysql.service MySQL Community Server Loaded loaded libsystemdsystemmysql.service enabled vendor preset enabled Active active running since Mon 20240819 125439 UTC 5min ago Main PID 536 mysqld Status Server is operational Tasks 37 limit 4675 Memory 424.0MCPU 3.294s CGroup system.slicemysql.service 536 usrsbinmysqldAug 19 125435 mysqltest systemd1 Starting MySQL Community Server...Aug 19 125439 mysqltest systemd1 Started MySQL Community Server.정상적으로 mysql 서버가 작동되는 것을 확인 할 수 있다.근데 이 다음부터가 좀 귀찮은 일이 많다.이 서버를 사용 하기 위해 포트, 사용자, 데이터 베이스, 연결 등등등등등등에 대한 몇 가지를 설정해주어야 한다. mysql 파일 설정mysql의 기본 포트로는 3306 이다.이를 변경할 수 있으며, 변경하는 해당 위치는 다음과 같다.bash pwdetcmysqlmysql.conf.dmysqld.cnf해당 파일을 한번 살펴보자.python The MySQL database server configuration file. One can use all long options that the program supports. Run program with help to get a list of available options and with printdefaults to see which it would actually understand and use. For explanations see httpdev.mysql.comdocmysqlenserversystemvariables.html Here is entries for some specific programs The following values assume you have at least 32M rammysqld Basic Settingsuser mysql pidfile varrunmysqldmysqld.pid socket varrunmysqldmysqld.sock port 3306 datadirvarlibmysql If MySQL is running as a replication slave, this should be changed. Ref httpsdev.mysql.comdocrefman8.0enserversystemvariables.htmlsysvartmpdir tmpdir tmp Instead of skipnetworking the default is now to listen only on localhost which is more compatible and is not less secure.bindaddress 127.0.0.1mysqlxbindaddress 127.0.0.1 Fine Tuningkeybuffersize 16M maxallowedpacket 64M threadstack 256K threadcachesize1 This replaces the startup script and checks MyISAM tables if needed the first time they are touchedmyisamrecoveroptions BACKUP maxconnections 151 tableopencache4000 Logging and Replication Both location gets rotated by the cronjob. Log all queries Be aware that this log type is a performance killer. generallogfile varlogmysqlquery.log generallog 1 Error log should be very few entries.logerror varlogmysqlerror.log Here you can see queries with especially long duration slowquerylog 1 slowquerylogfilevarlogmysqlmysqlslow.log longquerytime 2 logqueriesnotusingindexes중간중간 주석이 표시되어 있다.사실 굳이굳이 건들건 몇 개 없는데보안상 포트를 변경하고 싶다면, port 3306 이 부분을 주석을 해제한 후, 원하는 포트로 변경하고 저장하면 된다.또 설계에 따라 상이하겠지만, 데이터베이스를 만들었으니 외부 접속을 필요로 할 수 있다.이때는 바인드를 내부망이 아닌 상태로 변경 해야하는데,bindaddress 0.0.0.0 으로 변경하면 간단히 해결된다.또는 주석처리해도 같은 결과다.이외 다른 사항은 필요하다면 구글 검색하자.다른 친절하신 분들이 잘 설명했을 것이다.마지막으로 당연히도 변경사항이 발생했다면bash sudo systemctl restart mysql.service서비스 재시작은 꼭 해주자. OS 방화벽ubuntu 서버에서 uwf 가 활성화가 되어 있다면 외부에서 접속이 가능하도록 허용을 해주어야 하는데,규칙은 다음과 같다.bash sudo ufw allow in or out PORT or ServiceNameutp or tcp허용하는 방법은 여러가지인데 이중에 편한거 쓰면되겠다.bash sudo ufw allow 33063306 포트에 대한 UTPTCP 를 모두 개방한다. sudo ufw allow mysqlmysql 이라는 서비스의 UTPTCP 를 모두 개방한다. sudo ufw allow in 3306tcp sudo ufw allow out 3306tcp3306 포트에 대한 TCP 개방하며, 들어오는 신호 나가는 신호들을 개방한다. sudo ufw allow 3306tcp바로 위의 조건을 한번에 허용하는 조건이다. 포트 포워딩클라우드인 GCP, AWS 등의 VM 환경에선 위 OS 단계에서 방화벽 설정은 굳이 하지 않는다.만약 가정집이냐 클라우드 서버이냐에 따라 설정 방법이 다른데가정집의 경우 공유기 를 안통할 수가 없을 텐데, 공유기마다의 포트포워딩 하는 방법은 상이하므로 알아서 찾아본다. 아니 물론 모뎀에서 바로 끌어다 쓸 수 있겟는데 있을라나 공유기의 포트포워딩에서 3306 포트로 들어오는 신호를 sql 를 설치한 서버에 연결 시켜주면 된다.클라우드 서버인 GCP의 경우는 여기httpswww.jparklabs.compost22790로 이동하여 알아보자.
2024-08-20 15:30:48
Public