Насколько безопасно использовать хеши для идентификации файлов?

Я разрабатываю облачное программное обеспечение для хранения данных поверх стека LAMP.

Файлы могут иметь внутренний идентификатор, но было бы много преимуществ, если бы хранить их не с увеличивающимся идентификатором в качестве имени файла в файловых системах серверов, а с использованием хэша в качестве имени файла.

Также хэши в качестве идентификатора в базе данных имели бы много преимуществ, если бы текущая централизованная база данных была Необходимо настроить сегментированную, децентрализованную или какую-то среду высокой доступности мастер-мастер. Но я еще не уверен в этом.

Клиенты могут хранить файлы под любой строкой (обычно это какой-то путь и имя файла).

Эта строка гарантированно уникальна, потому что на первом уровне это что-то вроде "buckets" " что пользователи должны пройти регистрацию, как в Amazon S3 и хранилище Google.

Мой план состоит в том, чтобы хранить файлы в виде хэша пути, определенного на стороне клиента.

Таким образом, сервер хранилища может напрямую обслуживать файл без необходимости запрашивать базу данных какой это идентификатор, потому что он может вычислить хэш и, следовательно, имя файла на лету.

Но я боюсь коллизий. В настоящее время я думаю об использовании хэшей SHA1.

Я слышал, что GIT использует хэши также и идентификаторы ревизий.

Я знаю, что вероятность коллизий действительно очень мала, но возможна.

Я просто не могу судить об этом. Вы бы использовали для этой цели хэш или нет?

Я мог бы также использовать некоторую нормализацию кодирования пути. Возможно, base64 как имя файла, но я действительно не хочу этого, потому что это может стать беспорядочным, а пути могут стать слишком длинными и, возможно, другими сложностями. Я пытаюсь заставить Хадсона клонировать репозиторий, чтобы он мог построить мой проект. На данный момент работает следующая задача. Я могу синхронизироваться со своим внешним ...

После установки и экспериментов с mercurial, я пытаюсь заставить Хадсона клонировать репозиторий, чтобы он мог построить мой проект.

На данный момент работает следующая задача.

  • Я могу синхронизироваться с моим внешним хостом, и код появляется на этом хосте.

Теперь я пытаюсь настроить hudson / jenkins для доступа к коду на моем хосте.

Но, к сожалению, я получаю ошибку:

Started by user anonymous
$ hg clone --rev default https://bitbucket.org/*/testproject "F:\Hudson\jobs\testproject\workspace"
abort: http authorization required
ERROR: Failed to clone https://bitbucket.org/*/testproject
[workspace] $ hg log --rev . --template {node}
java.io.IOException: Cannot run program "hg" (in directory "F:\Hudson\jobs\testproject\workspace"): CreateProcess error=267, The directory name is invalid
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
    at hudson.Proc$LocalProc.<init>(Proc.java:244)
    at hudson.Proc$LocalProc.<init>(Proc.java:216)
    at hudson.Launcher$LocalLauncher.launch(Launcher.java:698)
    at hudson.Launcher$ProcStarter.start(Launcher.java:329)
    at hudson.Launcher$ProcStarter.join(Launcher.java:336)
    at hudson.plugins.mercurial.MercurialSCM.joinWithPossibleTimeout(MercurialSCM.java:298)
    at hudson.plugins.mercurial.HgExe.popen(HgExe.java:191)
    at hudson.plugins.mercurial.HgExe.tip(HgExe.java:171)
    at hudson.plugins.mercurial.MercurialSCM.calcRevisionsFromBuild(MercurialSCM.java:254)
    at hudson.scm.SCM._calcRevisionsFromBuild(SCM.java:304)
    at hudson.model.AbstractProject.calcPollingBaseline(AbstractProject.java:1186)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1175)
    at hudson.model.AbstractBuild$AbstractRunner.checkout(AbstractBuild.java:523)
    at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:418)
    at hudson.model.Run.run(Run.java:1362)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
    at hudson.model.ResourceController.execute(ResourceController.java:88)
    at hudson.model.Executor.run(Executor.java:145)
Caused by: java.io.IOException: CreateProcess error=267, The directory name is invalid
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
    at java.lang.ProcessImpl.start(ProcessImpl.java:30)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
    ... 18 more
Finished: FAILURE

Какие действия мне нужно сделать, чтобы указать Хадсону использовать имя пользователя x и пароль y для доступа к данным?

Отредактировано => Найдено, как интегрировать ssh.

21
задан David 3 April 2011 в 09:17
поделиться