MYSQL에서 outfile "access denied"로 변환 - 그러나 내 사용자는 "ALL"로 액세스할 수 있습니다.그리고 폴더는 CHMOD 777 입니다.
좋은 생각 있어요?
SELECT * INTO OUTFILE '/home/myacnt/docs/mysqlCSVtest.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '*'
LINES TERMINATED BY '\n'
FROM tbl_property
WHERE managerGroupID = {$managerGroupID}
오류:
Access denied for user 'asdfsdf'@'localhost' (using password: YES)
다음 SQL 명령을 실행해 보십시오.
> grant all privileges
on YOUR_DATABASE.*
to 'asdfsdf'@'localhost'
identified by 'your_password';
> flush privileges;
당신이 언급한 폴더에 쓰지 않고 데이터베이스에 연결하는 데 문제가 있는 것 같습니다.
또, 반드시, 당신이 허락한 것을 확인해 주세요.FILE
사용자에게'asdfsdf'@'localhost'
.
> GRANT FILE ON *.* TO 'asdfsdf'@'localhost';
솔직히 나는 보조금에 대해 신경 쓰지 않았고 이것은 특권이 없어도 효과가 있었다.
echo "select * from employee" | mysql --host=HOST --port=PORT --user=UserName --password=Password DATABASE.SCHEMA > output.txt
@fijaaron의 말처럼
GRANT ALL
를 의미하지 않습니다.GRANT FILE
GRANT FILE
와만 연동되다*.*
역시 그렇다
GRANT FILE ON *.* TO user;
cP/WHM에 의해 PHPyAdmin의 루트로 사용자 특권을 변경하는 기능이 상실되었기 때문에 명령줄을 사용하여 다음 작업을 수행해야 합니다.
mysql> GRANT FILE ON *.* TO 'user'@'localhost';
2단계는 사용자가 특정 폴더에 파일을 덤프할 수 있도록 하는 것입니다.몇 가지 방법이 있는데, 결국에 폴더를 넣게 되었습니다.
/home/user/tmp/db
그리고.
chown mysql:mysql /home/user/tmp/db
그러면 mysql 사용자가 파일을 쓸 수 있습니다.이전 포스터에서 언급했듯이 MySQL temp 폴더도 사용할 수 있습니다.그것은 그다지 중요하지 않다고 생각합니다만, 데이터가 세상에 공개되는 것을 원하지 않는 한, 0777 permission(world-writeable)으로 하고 싶지 않습니다.다음과 같이 프로세스를 헹구고 반복하는 경우 문제가 발생할 수 있습니다.INTO OUTFILE
파일이 존재하면 동작하지 않습니다.다른 사용자가 파일을 소유하고 있는 경우unlink($file)
작동하지 않습니다.저와 같은 경우(약 0777에 대한 패러노이드) 다음을 사용하여 대상 디렉토리를 설정할 수 있습니다.
chmod($dir,0777)
SQL 명령어를 실행하기 직전에,
chmod($dir,0755)
직후에 이어서unlink(file)
파일을 삭제합니다.이렇게 하면 웹 사용자로 모든 것이 실행되며 mysql 사용자를 호출할 필요가 없습니다.
나는 모든 해결책을 시도해 보았지만 여전히 충분하지 않았다.좀 더 자세히 알아보니 결국 'file_priv' 플래그를 설정하고 mysql을 재시작해야 했습니다.
재개하는 방법:
권한을 부여합니다.
> GRANT ALL PRIVILEGES
ON my_database.*
to 'my_user'@'localhost';
> GRANT FILE ON *.* TO my_user;
> FLUSH PRIVILEGES;
플래그를 설정합니다.
> UPDATE mysql.user SET File_priv = 'Y' WHERE user='my_user' AND host='localhost';
마지막으로 mysql 서버를 재시작합니다.
$ sudo service mysql restart
그 후, 나는 그 안에 글을 쓸 수 있었다.secure_file_priv
디렉토리로 이동합니다.저는 /var/lib/mysql-files/이지만 다음 명령을 사용하여 확인할 수 있습니다.
> SHOW VARIABLES LIKE "secure_file_priv";
미래의 독자들에게 bash를 사용하여 대량으로 내보내기를 원하는 경우 다음과 같은 간단한 방법이 있습니다.
akshay@ideapad:/tmp$ mysql -u someuser -p test -e "select * from offices"
Enter password:
+------------+---------------+------------------+--------------------------+--------------+------------+-----------+------------+-----------+
| officeCode | city | phone | addressLine1 | addressLine2 | state | country | postalCode | territory |
+------------+---------------+------------------+--------------------------+--------------+------------+-----------+------------+-----------+
| 1 | San Francisco | +1 650 219 4782 | 100 Market Street | Suite 300 | CA | USA | 94080 | NA |
| 2 | Boston | +1 215 837 0825 | 1550 Court Place | Suite 102 | MA | USA | 02107 | NA |
| 3 | NYC | +1 212 555 3000 | 523 East 53rd Street | apt. 5A | NY | USA | 10022 | NA |
| 4 | Paris | +33 14 723 4404 | 43 Rue Jouffroy D'abbans | NULL | NULL | France | 75017 | EMEA |
| 5 | Tokyo | +81 33 224 5000 | 4-1 Kioicho | NULL | Chiyoda-Ku | Japan | 102-8578 | Japan |
| 6 | Sydney | +61 2 9264 2451 | 5-11 Wentworth Avenue | Floor #2 | NULL | Australia | NSW 2010 | APAC |
| 7 | London | +44 20 7877 2041 | 25 Old Broad Street | Level 7 | NULL | UK | EC2N 1HN | EMEA |
+------------+---------------+------------------+--------------------------+--------------+------------+-----------+------------+-----------+
루트 사용자가 아닌 사용자가 내보내는 경우 다음과 같이 권한을 설정하십시오.
root@ideapad:/tmp# mysql -u root -p
MariaDB[(none)]> UPDATE mysql.user SET File_priv = 'Y' WHERE user='someuser' AND host='localhost';
mysqld 재시작 또는 새로고침
akshay@ideapad:/tmp$ sudo su
root@ideapad:/tmp# systemctl restart mariadb
샘플 코드 스니펫
akshay@ideapad:/tmp$ cat test.sh
#!/usr/bin/env bash
user="someuser"
password="password"
database="test"
mysql -u"$user" -p"$password" "$database" <<EOF
SELECT *
INTO OUTFILE '/tmp/csvs/offices.csv'
FIELDS TERMINATED BY '|'
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM offices;
EOF
실행
akshay@ideapad:/tmp$ mkdir -p /tmp/csvs
akshay@ideapad:/tmp$ chmod +x test.sh
akshay@ideapad:/tmp$ ./test.sh
akshay@ideapad:/tmp$ cat /tmp/csvs/offices.csv
"1"|"San Francisco"|"+1 650 219 4782"|"100 Market Street"|"Suite 300"|"CA"|"USA"|"94080"|"NA"
"2"|"Boston"|"+1 215 837 0825"|"1550 Court Place"|"Suite 102"|"MA"|"USA"|"02107"|"NA"
"3"|"NYC"|"+1 212 555 3000"|"523 East 53rd Street"|"apt. 5A"|"NY"|"USA"|"10022"|"NA"
"4"|"Paris"|"+33 14 723 4404"|"43 Rue Jouffroy D'abbans"|\N|\N|"France"|"75017"|"EMEA"
"5"|"Tokyo"|"+81 33 224 5000"|"4-1 Kioicho"|\N|"Chiyoda-Ku"|"Japan"|"102-8578"|"Japan"
"6"|"Sydney"|"+61 2 9264 2451"|"5-11 Wentworth Avenue"|"Floor #2"|\N|"Australia"|"NSW 2010"|"APAC"
"7"|"London"|"+44 20 7877 2041"|"25 Old Broad Street"|"Level 7"|\N|"UK"|"EC2N 1HN"|"EMEA"
언급URL : https://stackoverflow.com/questions/6091427/mysql-into-outfile-access-denied-but-my-user-has-all-access-and-the-fold
'programing' 카테고리의 다른 글
MySql: Tinyint (2)와 Tinyint (1)의 차이점은 무엇입니까? (0) | 2022.11.23 |
---|---|
PHP 5.4.0 이전 버전에서 익명 함수로 "$this" 사용 (0) | 2022.11.23 |
JavaScript가 비활성화되어 있는지 여부를 검출하는 방법 (0) | 2022.11.23 |
Laravel JSON Where Clauses with MariaDB 10.2.16 LongText 열을 사용할 수 있습니까? (0) | 2022.11.23 |
django.db.db.ss.Operation Error: (1071, '지정된 키가 너무 깁니다. 최대 키 길이는 767바이트입니다') (0) | 2022.11.23 |