Я пытаюсь создать dmp файл таблицы A_LOCKER, используя команду expdp cmd, а затем перевести его обратно на локальный компьютер, на котором разворачивается мой Java-код. Сервер - сервер веб-журнала oracle. Код работает нормально в первый раз, но со второго раза он дает ошибку как: Permission denied
Файл dmp создается в каталоге насоса данных Extract, который создается мной.
Теперь я пытаюсь sftp dmp файл, и для этого мне нужно предоставить разрешение sudo для файла, поэтому я пробовал следовать в своем java-коде: 1) Создать сеанс:
StringBuffer cmd = new StringBuffer();
FileOutputStream fileOutputStream = null;
SshClient ssh = new SshClient();
SessionChannelClient session = null;
SftpClient sftp = null;
HostKeyVerification host = new IgnoreHostKeyVerification();
// Try to connect to the machine that includes the shared folder
// Throw an exception when a connection is failed.
try {
ssh.connect(machine, host);
} catch (IOException e) {
logger.error("Cannot connect to dbserver in machine "
+ machine,e);
throw new EPCShareFileException(
"Cannot connect to dbserver location in machine "
+ machine, e);
}
PasswordAuthenticationClient auth = new PasswordAuthenticationClient();
auth.setUsername(user);
auth.setPassword(password);
// Authenticate user name and password for connection
// Throw an exception if authentication is failed
try {
ssh.authenticate(auth);
} catch (IOException e) {
logger.error("Cannot authenticate user "
+ user + " " + " password " + password);
ssh.disconnect();
throw new EPCShareFileException("Cannot authenticate user "
+ user + " " + " password " + password, e);
}
2) Выполнение команды chmod с использованием псевдо разрешения
cmd.append("/usr/local/bin/sudo /bin/chmod -R 777 ")
.append(location+dbDumpFileName);
try{
session = ssh.openSessionChannel();
session.executeCommand(cmd.toString());
} catch (IOException e){
logger.error("Cannot execute chmod cmd");
}
finally{
try {
session.close();
} catch (IOException e) {
// TODO Auto-generated catch block
logger.info("Cannot close the session:"+e.getMessage());
}
}
3) Затем я пытаюсь sftp dmp файл на локальный сервер
try {
sftp = ssh.openSftpClient();
} catch (IOException e) {
logger.error("Cannot open connection to database server");
ssh.disconnect();
throw new EPCShareFileException(
"Cannot open connection to database server");
}
try{
fileOutputStream = new FileOutputStream(dbDumpFileName);
sftp.get(location+dbDumpFileName, fileOutputStream);
}catch (IOException e) {
**throw new EPCShareFileException("Cannot retrive file "
+"Error:"+e.getMessage());**
}finally{
try {
fileOutputStream.close();
sftp.quit();
fileOutputStream = null;
sftp = null;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ssh.disconnect();
ssh = null;
}
В первый раз, когда я развертываю свой код в качестве ушного файла на сервере oracle weblogic, он работает с файлом и создается файл dmp, а также удаляется в нужное место. Но со второго раза я получаю ошибку: Ошибка: разрешение отклонено
Пожалуйста помоги..
Прежде всего, никогда не используйте chmod -R 777
- это, как публикация ваших данных для всех, у кого есть доступ к машине, никаких вопросов не задано. Если вы использовали это для отладки проблемы, тогда все в порядке, но не забудьте изменить его обратно (или избавиться от него, вам это совсем не нужно).
Чтобы отладить ошибки "Разрешения на отказ", вам необходимо иметь доступ к машине. На машине вам необходимо войти в систему как пользователь, получивший ошибку (не пытайтесь использовать root или другого пользователя).
Как этот пользователь, попробуйте получить доступ к каждой папке на пути, к которому вы не можете получить доступ. Поэтому, если это не удалось для /srv/www/foo/bar/x/y/z/file.txt
, тогда вам нужно
ls /srv
ls /srv/www/
ls /srv/www/foo/
ls /srv/www/foo/bar/
ls /srv/www/foo/bar/x/
ls /srv/www/foo/bar/x/y/
ls /srv/www/foo/bar/x/y/z/
ls /srv/www/foo/bar/x/y/z/file.txt
Сделайте это в этом порядке. Найдите первую неудачную команду и проверьте, почему у этого пользователя нет разрешений для данной папки.
chmod 777
хуже, чем просто «публиковать» данные для всех (то есть позволяет им читать их) - каждый пользователь также может изменить или удалить их.
permission denied
вpermission denied
при попытке прочитать файл на сервере Oracle или записать его на локальный компьютер? Какие разрешения имеет локальный файл после первогоget
? (Если, конечно, вы не удалите его перед второй попыткой ...)