2009-02-12 49 views
8

Tôi đang xem một số mã chuyển đổi tên người dùng thành chữ thường, trước khi lưu trữ chúng. Tôi chắc chắn 90% điều này là ok, nhưng có những hệ thống ra khỏi đó mà thực sự yêu cầu độ nhạy trường hợp trên tên người dùng (đặc biệt là trong ngành công nghiệp y tế)?Tên người dùng có phân biệt chữ hoa chữ thường không?

Lưu ý: mã cụ thể của tôi không phải là điểm vào. Chúng tôi đang lấy tên người dùng từ các hệ thống khác. Nỗi lo lắng tôi có là tùy thuộc vào các hệ thống đó (có thể hoặc không nằm trong tầm kiểm soát của chúng tôi) để liên tục truyền tên người dùng trong cùng một trường hợp với nhau (khi mô tả cùng một người dùng).

Cũng đáng chú ý - mã là:

userName.toLowerCase(Locale.ENGLISH) 

Có phải tất cả tên người dùng bằng tiếng Anh? Đây có phải là chỉ để nó phù hợp với collation trong cơ sở dữ liệu? Lưu ý rằng (trong java ít nhất) String.toLowerCase() được định nghĩa là String.toLowerCase(Locale.getDefault())

Trả lời

0

Nếu mục tiêu duy nhất của bạn là phân biệt người dùng này với người dùng khác, có vẻ hợp lý mà bạn muốn nhiều hơn trường hợp là yếu tố.

21

đăng nhập unix phân biệt chữ hoa chữ thường ...

Có hệ thống nào khác thực hiện việc này không?

+1

Có ai đó có thể cho tôi biết lý do tại sao điều này bị giảm giá không? Nó không phải là một câu trả lời cụ thể trong trường hợp của tôi, nhưng tôi đã nghĩ nó hữu ích cho người khác. Đưa cái gì? – Stephen

+2

Ghét ổ đĩa bằng số phiếu giảm giá. Đáng buồn thay, chúng xảy ra. –

+0

Vâng, điều này trả lời chính xác những gì đã được hỏi. Nó chỉ ra một trường hợp tên người dùng phân biệt chữ hoa chữ thường. Tôi upvoted này. –

0

Tôi chưa bao giờ gặp phải một hệ thống bắt buộc phải nhạy cảm với trường hợp trên tên người dùng (cũng như tôi không muốn).

Rất có thể mã này sẽ buộc chúng chữ thường tại điểm nhập cảnh như một nỗ lực nhằm ngăn chặn sự cố về độ nhạy trường hợp sau này.

+0

Tôi đã chỉnh sửa để lưu ý rằng hệ thống của chúng tôi không phải là người cung cấp quyền truy cập. – Stephen

+0

'Tên người dùng Wikipedia phân biệt chữ hoa chữ thường, nhưng chữ cái đầu tiên luôn tự động được viết hoa' được lấy từ https://en.wikipedia.org/wiki/Wikipedia:Username_policy – Jakob

+0

Trong khi tên người dùng Wikimedia/Wikipedia/MediaWiki phân biệt chữ hoa chữ thường, phần mềm ngăn hai tên người dùng chỉ khác nhau bằng cách viết hoa. –

2

Giảm tên người dùng bằng ngôn ngữ tiếng Anh nhất định sẽ khiến bạn gặp sự cố. Tôi sẽ đề nghị giảm sử dụng văn hóa bất biến.

+0

Trong Java, đây sẽ là Locale.ROOT – Stephen

+0

Văn hóa bất biến trong .NET là ngôn ngữ tiếng anh. – Joshua

+3

@Joshua - đây là chi tiết triển khai nội bộ mà bạn không nên dựa vào. –

6

toLowerCase chỉ có một lý do cho nó chấp nhận một ngôn ngữ:

kể từ lá thư nhỏ tôi có một dấu chấm trong mọi ngôn ngữ tiêu chuẩn, chữ I được chuyển thành một tôi với một dấu chấm.

nhưng ở Thổ Nhĩ Kỳ, cũng có một chữ cái viết hoa có dấu chấm ở trên. điều này được chuyển thành một chữ cái nhỏ i.

thủ đô Thổ ​​Nhĩ Kỳ "thông thường" tôi được chuyển thành một ı nhỏ - không có dấu chấm.

vì vậy, trừ khi tên người dùng Thổ Nhĩ Kỳ của bạn được gọi là IiI1I1iiII, tôi sẽ không lo lắng về điều này.

mọi ngôn ngữ khác ngoài ngôn ngữ Thổ Nhĩ Kỳ có cách thực hiệnLowerCaseImplementation giống hệt nhau. vì vậy bạn có thể chọn Locale.ENGLISH hoặc Locale.GERMAN hoặc bất cứ điều gì..chắc chắn rằng bạn không chọn Thổ Nhĩ Kỳ.

thấy javadoc for more detailed information

chỉnh sửa: nhờ Utku Karataş tôi có thể/copy dán glyphs đúng trong ths đường bưu điện.

+0

Bạn gặp sự cố với tiếng Thổ Nhĩ Kỳ? Dù sao không có lý do để được lười biếng, khi sử dụng một miền địa phương bất biến là tất cả các công việc cần thiết để hỗ trợ một vài triệu người dùng tiềm năng. –

+1

Không có bàn phím tiếng Thổ Nhĩ Kỳ Andreas? :) Hãy để tôi minh họa vấn đề ... thấp hơn ("I") = "ı", thấp hơn ("İ") -> "i". –

+0

Và btw Jeff có một bài viết dài về vấn đề này .. http://www.codinghorror.com/blog/archives/001075.html –

0

Nó phụ thuộc vào ngữ cảnh, nhưng trong phương ngữ Informix của SQL, có 'chủ sở hữu' (về cơ bản tương đương với lược đồ trong SQL chuẩn) và cách bạn viết tên chủ sở hữu.

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

Hai tên được trích dẫn chắc chắn khác nhau; hai tên unquote được ánh xạ tới cùng một tên, cái mà (tùy thuộc vào chế độ cơ sở dữ liệu) có thể là một trong hai tên còn lại. Có một số mã xung quanh trường hợp chuyển đổi trên các tên (không được chọn). May mắn thay, hầu hết thời gian bạn không cần phải chỉ định tên, và khi bạn làm bạn viết tên mà không có dấu ngoặc kép và tất cả các công trình; hoặc bạn viết tên với dấu ngoặc kép và nhất quán và tất cả đều hoạt động. Đôi khi, mặc dù, những người như tôi phải thực sự hiểu các chi tiết để có được chương trình làm việc một cách an toàn mặc dù tất cả các hoops.

Ngoài ra, (như Stephen đã lưu ý) Đăng nhập Unix phân biệt chữ hoa chữ thường và luôn luôn như vậy. Tôi tin rằng đăng nhập Windows phần lớn là không phân biệt chữ hoa chữ thường - nhưng tôi không thử nghiệm với điều đó (có quá nhiều cách để sửa lỗi trên Windows mà không cần thêm mẹo vặt đó vào trò chơi).

Nếu bạn thực sự muốn gây nhầm lẫn cho ai đó trên Unix, hãy cung cấp cho họ tên người dùng số (ví dụ: 123) nhưng cung cấp cho họ UID khác (ví dụ: 234).

1

Kerberos, cũng có thể được sử dụng trong môi trường Windows, có vấn đề về độ nhạy. Bạn có thể cấu hình nó theo một cách nhất định để đảm bảo rằng các vấn đề về độ nhạy trường hợp sẽ không phát sinh, nhưng nó cũng có thể đi theo cách khác.

3

Sử dụng tên người dùng/mật khẩu phân biệt chữ hoa chữ thường là cách dễ dàng để tăng cường bảo mật, do đó, câu hỏi là, bạn quan tâm đến bảo mật và khả năng sử dụng bao nhiêu. Chỉ cần ghi nhớ rằng cách bạn đang xem xét việc giải quyết các trường hợp vô cảm có thể có một số vấn đề nội địa hoá, nhưng nếu bạn không quan tâm thì đừng lo lắng về nó.

Các vấn đề liên quan