2009-02-12 6 views
8

Я ищу код, который преобразует имена пользователей в нижний регистр, прежде чем хранить их. Я на 90% уверен, что все в порядке, но существуют ли там системы, которые действительно требуют чувствительности к регистру пользователей (особенно в сфере здравоохранения)?Являются ли имена пользователей когда-либо чувствительными к регистру?

Примечание: мой конкретный код не находится в пункте въезда. Мы берем имена пользователей из других систем. Опасность, которую я испытываю, зависит от тех систем (которые могут или не могут находиться под нашим контролем) последовательно передавать нам имена пользователей в том же случае, что и друг для друга (при описании одного и того же пользователя).

Также стоит отметить - код:

userName.toLowerCase(Locale.ENGLISH) 

ли все имена пользователей на английском языке? Это просто так соответствует сопоставлению в базе данных? Обратите внимание, что (в java как минимум) String.toLowerCase() определяется как String.toLowerCase(Locale.getDefault())

ответ

0

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

21

UNIX логинов чувствительны к регистру ...

Существуют ли какие-либо другие системы, которые делают это?

+1

Кто-нибудь может сказать мне, почему это происходит вниз? Это не конкретный ответ в моем случае, но я бы счел это полезным для других. Что дает? – Stephen

+2

Ненависть диск вниз по голосам. К сожалению, они случаются. –

+0

Ну, это отвечает именно тому, что было задано. В нем указывается случай, когда имена пользователей чувствительны к регистру. Я поддержал это. –

0

Я никогда не сталкивался с системой, которая применяла чувствительность к регистру на именах пользователей (и я не хочу).

Скорее всего, код заставляет их вводить строчные буквы в точке ввода в качестве попытки предотвратить проблемы с чувствительностью к регистру позже.

+0

Я отредактировал, чтобы отметить, что наша система не обеспечивает доступ. – Stephen

+0

'Википедические имена пользователей чувствительны к регистру, но первая буква всегда автоматически заглавна из https://en.wikipedia.org/wiki/Wikipedia:Username_policy – Jakob

+0

Хотя имена пользователей Wikimedia/Wikipedia/MediaWiki чувствительны к регистру, программное обеспечение предотвращает два имени пользователя, которые отличаются только капитализацией. –

2

Уменьшение имени пользователя с использованием английского языка неизбежно вызовет у вас проблемы. Я бы предложил нижнюю шкалу с использованием инвариантной культуры.

+0

В Java это будет Locale.ROOT – Stephen

+0

Инвариантная культура в .NET - это английский язык в любом случае. – Joshua

+3

@Joshua - это внутренняя деталь реализации, на которую нельзя положиться. –

6

toLowerCase есть только одна причина для того, чтобы принять локаль:

так строчной я есть точка в каждом стандартном языке, буква I преобразуется в I с точкой.

но в турки, есть также прописная буква İ с точкой выше. это преобразуется в маленькую букву i.

«обычная» турецкая столица Я превратился в маленькую ı - без точки.

так что, если ваши турецкие имена не называются IiI1I1iiII, я вряд ли буду беспокоиться об этом.

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

см javadoc for more detailed information

редактировать: благодаря Утке Каратаза я мог/копировать вставить правильные глифы тыс поста.

+0

Есть проблемы с турецким? В любом случае, нет оснований лениться при использовании инвариантной локали, это вся работа, необходимая для поддержки нескольких миллионов потенциальных пользователей. –

+1

Нет турецкой клавиатуры Андреас? :) Позвольте мне проиллюстрировать проблему ... lower ("I") = "ı", ниже ("İ") -> "i". –

+0

И btw Джефф имеет длинный пост об этой проблеме. Http://www.codinghorror.com/blog/archives/001075.html –

0

Это зависит от контекста, но на диалекте SQL Informix существуют «владельцы» (в основном эквивалентны схеме в стандартном SQL) и как вы пишете имя владельца.

SELECT * 
    FROM someone.sometable, "someone".sometable, 
     SOMEONE.sometable, "SOMEONE".sometable 

Два цитируемых названия, безусловно, разные; два имени без имени сопоставляются с тем же именем, которое (в зависимости от режима базы данных) может быть любым из двух других. Существует некоторый код, вокруг которого выполняется case-преобразование (без кавычек) имен. К счастью, большую часть времени вам не нужно указывать имя, а когда вы пишете имя без кавычек, и все это работает; или вы пишете имя с кавычками и согласуетесь, и все это работает. Иногда, хотя, такие люди, как я, должны действительно понимать детали, чтобы заставить программы работать здорово, несмотря на все обручи.

Кроме того, как отметил Стивен, вход в систему Unix чувствителен к регистру и всегда был. Я считаю, что Windows-логины в основном не учитывают регистр, но я не экспериментирую с этим (слишком много способов запутаться в Windows, не добавляя в игру такие трюки).

Если вы действительно хотите смутить кого-то в Unix, дайте им числовое имя пользователя (например, 123), но дайте им другой UID (например, 234).

1

Kerberos, который также может использоваться в средах Windows, также имеет проблемы с чувствительностью к регистру. Вы можете настроить его определенным образом, чтобы проблемы с чувствительностью к регистру не возникали, но это может пойти и наоборот.

3

Использование пароля с учетом имени пользователя и паролей - это простой способ повысить безопасность, поэтому возникает вопрос, насколько вы заботитесь о безопасности и удобстве использования. Просто имейте в виду, что то, как вы смотрите на решение проблемы нечувствительности, может иметь некоторые проблемы с локализацией, но если вам все равно, не беспокойтесь об этом.

Смежные вопросы