Ответы выше не работают, если включена опция Bash set -u
. Кроме того, они не являются динамическими, например, как проверить, определяется ли переменная с именем «dummy»? Попробуйте это:
is_var_defined()
{
if [ $# -ne 1 ]
then
echo "Expected exactly one argument: variable name as string, e.g., 'my_var'"
exit 1
fi
# Tricky. Since Bash option 'set -u' may be enabled, we cannot directly test if a variable
# is defined with this construct: [ ! -z "$var" ]. Instead, we must use default value
# substitution with this construct: [ ! -z "${var:-}" ]. Normally, a default value follows the
# operator ':-', but here we leave it blank for empty (null) string. Finally, we need to
# substitute the text from $1 as 'var'. This is not allowed directly in Bash with this
# construct: [ ! -z "${$1:-}" ]. We need to use indirection with eval operator.
# Example: $1="var"
# Expansion for eval operator: "[ ! -z \${$1:-} ]" -> "[ ! -z \${var:-} ]"
# Code execute: [ ! -z ${var:-} ]
eval "[ ! -z \${$1:-} ]"
return $? # Pedantic.
}
Связано: Как в Bash проверить, определена ли переменная в & quot; -u & quot; Режим
Что ж, я не уверен, в чем была основная причина того, что разрешение SELECT было отклонено для вашего пользователя db, но если вы запустите это, а затем оно действительно снова заработает, то где-то по строке ваш Разрешение SELECT действительно было уничтожено.
GRANT SELECT ON [dbo].[Address] TO [your user name here]
Хорошая новость в том, что разрешения не исчезают волшебным образом; плохие новости в том, что что-то (инструментарий или иное) действительно либо удалило, либо отозвало разрешения.
Я не думаю, что у нас достаточно информации, чтобы ответить на ваш вопрос о том, «почему» это произошло - хотя ничего из того, что вы По всей видимости, виновником является размещенное сообщение.
Быстро погуглил, нашел эту ссылку Ссылка
Предлагает запустить
select object_name(major_id) as object,
user_name(grantee_principal_id) as grantee,
user_name(grantor_principal_id) as grantor,
permission_name,
state_desc
from sys.database_permissions
where major_id = object_id('Users')
and class = 1
в вашей базе данных, чтобы увидеть, какие разрешения существуют, так как вы можете выбрать ОТКАЗ
Изменить
select object_name(major_id) as object,
user_name(grantee_principal_id) as grantee,
user_name(grantor_principal_id) as grantor,
permission_name,
state_desc
from sys.database_permissions
WHERE state_desc = 'DENY'
Удалось найти работающий ящик SQL 2k8 и запустить его, этот новый запрос покажет все отклонения. Также попробуйте убрать предложение WHERE, чтобы увидеть все разрешения для всех таблиц в текущей выбранной базе данных
Как указано в проблеме: «В разрешении SELECT было отказано для объекта« Адрес », база данных« CNET_85731 », схема« dbo »».
Интересно, что вы можете довольно просто решить этот способ:
Надеюсь, вы больше не получите эту ошибку.