ИЗБРАННОЕ разрешение было отклонено на объектном 'Адресе', базе данных 'CNET_85731', схема 'dbo'

Ответы выше не работают, если включена опция 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; Режим

23
задан Walter Lockhart 28 July 2009 в 21:18
поделиться

3 ответа

Что ж, я не уверен, в чем была основная причина того, что разрешение SELECT было отклонено для вашего пользователя db, но если вы запустите это, а затем оно действительно снова заработает, то где-то по строке ваш Разрешение SELECT действительно было уничтожено.

GRANT SELECT ON [dbo].[Address] TO [your user name here]

Хорошая новость в том, что разрешения не исчезают волшебным образом; плохие новости в том, что что-то (инструментарий или иное) действительно либо удалило, либо отозвало разрешения.

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

14
ответ дан 29 November 2019 в 00:45
поделиться

Быстро погуглил, нашел эту ссылку Ссылка

Предлагает запустить

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, чтобы увидеть все разрешения для всех таблиц в текущей выбранной базе данных

3
ответ дан 29 November 2019 в 00:45
поделиться

Как указано в проблеме: «В разрешении SELECT было отказано для объекта« Адрес », база данных« CNET_85731 », схема« dbo »».

Интересно, что вы можете довольно просто решить этот способ:

  • Откройте студию управления SQL Server
  • Перейдите к базе данных 'CNET_85731' >> Безопасность >> Пользователи
  • Щелкните правой кнопкой мыши ту, которую вы используете в ваш код
  • И, наконец, просто выберите « db_datareader » в разделе «Членство в ролях базы данных».

Надеюсь, вы больше не получите эту ошибку.

61
ответ дан 29 November 2019 в 00:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: