Учитывая Ваше отредактированное описание проблемы, я предложил бы использовать COALESCE()
вместо того громоздкого CASE
выражение:
SELECT FullName
FROM (
SELECT COALESCE(LastName+', '+FirstName, FirstName) AS FullName
FROM customers
) c
GROUP BY FullName;
Есть два отдельных вопроса:
Ответы, соответственно, да и нет. Аутентификация отлично работает с кешированием. Попробуйте это с поставщиками SQL или членства в домене; вы увидите.
Однако кэширование может выполняться до модуля аутентификации. (Для бонусных баллов: почему?) Аутентификация вызывается только в том случае, если она специально перехватывает кеш (как это делает AuthorizeAttribute). Поскольку сеансы зависят от пользователя, нет гарантии, что у вас будет сеанс внутри AuthorizeCore.
Дополнительные бонусные баллы: как это может измениться, если вы указали variableByUser в конфигурации кеша?
К сожалению, выполнить правильную аутентификацию сложно, потому что сложно выполнить какие-либо права безопасности. Microsoft пытается упростить эту задачу с помощью API поставщика членства. Я настоятельно рекомендую использовать при реализации пользовательской аутентификации. Я также рекомендую использовать встроенные поставщики и расширять их, а не переписывать, когда это возможно.
Еще один момент: поставщик сеанса ASP.NET и поставщик членства в ASP.NET полностью разделены. Разные пользователи-участники могут совместно использовать (!) Сеанс, и, да , вы можете атаковать сайт таким образом. никогда никогда не безопасно помещать в сеанс информацию, связанную с безопасностью. Безопасность - это сложно.
Microsoft пытается упростить эту задачу с помощью API поставщика членства. Я настоятельно рекомендую использовать при реализации пользовательской аутентификации. Я также рекомендую использовать встроенные поставщики и расширять их, а не переписывать, когда это возможно.Еще один момент: провайдер сеанса ASP.NET и провайдер членства в ASP.NET полностью разделены. Разные пользователи-участники могут совместно использовать (!) Сеанс, и, да , вы можете атаковать сайт таким образом. никогда никогда не безопасно помещать в сеанс информацию, связанную с безопасностью. Безопасность - это сложно.
Microsoft пытается упростить эту задачу с помощью API поставщика членства. Я настоятельно рекомендую использовать при реализации пользовательской аутентификации. Я также рекомендую использовать встроенные поставщики и расширять их, а не переписывать, когда это возможно.Еще один момент: поставщик сеанса ASP.NET и поставщик членства в ASP.NET полностью разделены. Разные пользователи-участники могут совместно использовать (!) Сеанс, и, да , вы можете атаковать сайт таким образом. никогда никогда не безопасно помещать информацию, связанную с безопасностью, в сеанс. Безопасность - это сложно.
Еще один момент: провайдер сеанса ASP.NET и провайдер членства в ASP.NET полностью разделены. Разные участники могут совместно использовать (!) Сеанс, и, да , вы можете атаковать сайт таким образом. никогда никогда не безопасно помещать информацию, связанную с безопасностью, в сеанс. Безопасность - это сложно.
Еще один момент: поставщик сеанса ASP.NET и поставщик членства в ASP.NET полностью разделены. Разные участники могут совместно использовать (!) Сеанс, и, да , вы можете атаковать сайт таким образом. никогда никогда не безопасно помещать в сеанс информацию, связанную с безопасностью. Безопасность - это сложно.