2008-10-23 2 views
11

outfile에 쓰는 MySQL 쿼리를 사용하고 있습니다. 매일 또는이 쿼리를 한 번 실행하면 su 또는 sudo를 사용하지 않고 outfile을 제거 할 수 있기를 원합니다. 내가 그렇게 생각할 수있는 유일한 방법은 outfile을 mysql 사용자가 아닌 다른 사람이 소유 한 것으로 쓰는 것이다. 이것이 가능한가?MySQL이 어떻게 outfiles를 다른 사용자로 쓸 수 있습니까?

편집 : 출력을 파일로 리디렉션하지 않고 파일로 출력하기 위해 선택 쿼리의 INTO OUTFILE 부분을 사용하고 있습니다.

도움이된다면 : 다른 사용자가 크론에서 쿼리를 실행 한 경우

 
mysql --version 
mysql Ver 14.12 Distrib 5.0.32, for pc-linux-gnu (x86_64) using readline 5.2 

답변

10

출력 파일은 클라이언트 프로세스가 아니라 mysqld 프로세스에 의해 생성됩니다. 따라서 출력 파일은 mysqld 프로세스의 uid와 gid가 소유해야한다.

파일에 액세스 할 수있는 uid 또는 gid 아래 프로세스에서 액세스하는 경우 sudo를 사용하지 않아도 파일에 액세스 할 수 있습니다. 다시 말해서, mysqld가 uid와 gid "mysql"/ "mysql"이 소유 한 파일을 생성한다면 "mysql"그룹에 자신의 계정을 추가하십시오. 그런 다음 파일의 권한 모드에 그룹 액세스가 포함되어 있으면 해당 파일에 액세스 할 수 있어야합니다.

편집 :

당신은 rwxrwxrwt의 디렉토리 권한 모드,/tmp 디렉토리에있는 파일을 삭제합니다. 고정 비트 ('t')는 파일이나 디렉토리의 사용 권한과 상관없이 uid가 파일 소유자와 동일한 경우에만 파일을 제거 할 수 있음을 의미합니다.

출력 파일을 고정 비트가 설정되지 않은 다른 디렉토리에 저장하면 파일을 정상적으로 제거 할 수 있습니다.

스티커 (8)의 man 페이지에서이 발췌 읽기 :

STICKY 번호부

디렉토리를`스티키 비트 '설정은 또는, 더 정확하게, 추가 전용 디렉토리가됩니다, 파일의 삭제가 제한되는 디렉토리. 고정 디렉토리에있는 파일은 사용자가 디렉토리에 대한 쓰기 권한을 가지고 있고 사용자가 파일 소유자, 디렉토리 소유자 또는 수퍼 유저 인 경우에만 제거하거나 이름을 변경할 수 있습니다. 이 기능은/tmp와 같이 공개적으로 쓸 수 있어야하지만 다른 사용자의 파일을 임의로 삭제하거나 이름을 바꿀 수있는 라이센스를 사용자가 거부해야하는 디렉토리에 유용합니다.

+1

을 할 수있는, 그것 뿐이다 "mysql"/ "mysql"및 modded 666. 추가했습니다. 나 자신을 mysql 그룹에 추가하고 난 여전히 그것을 삭제할 수 없다. –

+0

파일이있는 디렉터리의 소유권과 사용 권한은 무엇입니까? –

+0

I * think * Bill이 얻는 것은 UNIX에서 파일을 삭제할 수있는 포함 dir에 대한 쓰기 권한이 있어야한다는 것입니다 (b/c는 dir 목록을 업데이트 함). 그래서 "chgrp mysql"dir과 "chmod ug + rwX"mysql 그룹 사용자에게 dir에 perm을 쓴다. – joelhardi

1

, 그것은 해당 사용자로 파일을 생성합니다.

5

"SELECT ... INTO OUTFILE"구문을 사용하지 않습니다.

다른 사용자로 쿼리 (예 : 클라이언트)를 실행하고 출력을 리디렉션해야합니다. 예를 들어, 당신이 원하는 때마다 다음 명령을 실행하도록 crontab을 편집 :

mysql db_schema -e 'SELECT col,... FROM table' > /tmp/outfile.txt 

당신이 명령을 추가 한의 crontab의 사용자로 /tmp/outfile.txt 만들 것이다.

+0

'to outfile '과 비교할 때 파이핑이 다른 결과를 산출한다는 것에주의하십시오. 예를 들어, 파이핑은 첫 번째 행으로 열 이름을 포함하고 \ N 등 대신 NULL을 포함합니다 (우분투에서는 세부 사항이 다를 수 있음) –

1

난 그냥

sudo gedit /etc/apparmor.d/usr.sbin.mysqld 

/var/www/codeigniter/assets/download/* w, 

sudo service mysql restart 

추가 할 그리고 내가 SELECT INTO OUTFILE 쉽게 파일에서 소유하는 모든 파일 이름

관련 문제