AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 148224
Accepted
AKDiscer
AKDiscer
Asked: 2016-08-30 07:48:16 +0800 CST2016-08-30 07:48:16 +0800 CST 2016-08-30 07:48:16 +0800 CST

SQL Login 不断失去对数据库的访问权限

  • 772

我们创建了一个仅用于报告的 SQL 登录帐户 (SSRS),我们将其称为“ MyReportAcct ”。

我们已经使用这个帐户一段时间了,它是为每个新安装的实例创建的。除了在几个镜像实例上之外,它一直在按您的预期工作。我在我的环境中的任何独立实例上都没有看到这个问题。

根据我们的变更管理、Windows 日志和 SQL 错误日志的内部流程,报告将随机停止工作并且没有任何更改。以下是我们收到的两条错误消息:

在此处输入图像描述 在此处输入图像描述

在调查该帐户后,它会显示在 SSMS 的安全对象文件夹下。此外,我们发现该帐户与帐户属性的用户映射下的所有数据库相关联。我已经验证了 ' MyReportAcct ' 有publicand db_datareader,所以表面上看起来都符合预期。

当我尝试更改帐户或删除映射时,问题就来了。我遇到了:

  • 无法更改用户,因为它不存在或您没有权限(错误 15151)。
  • 无法删除用户 dbo..(错误 15150)

为了解决这个问题,我必须做的是删除服务器上“ MyReportAcct ”的每个实例,然后重新创建它,然后添加到每个数据库中。这不会一直发生,但经常会让人恼火。此外,我们根本不应该这样做。

我认为我们应该在每个实例中将此帐户更改为 Windows 帐户,而不是本地 SQL 登录。我觉得这可能会解决问题,但我需要证明原因或提供合理的答案。我认为部分问题在于以某种方式进行镜像,但我也不知道如何证明这一点。

安全性是我的一个弱点,我正在采取措施来改变这一点,因此您可以提供的任何见解将不胜感激。如果您需要更多信息,请告诉我。

security sql-server-2012
  • 2 2 个回答
  • 4479 Views

2 个回答

  • Voted
  1. Best Answer
    AKDiscer
    2016-08-31T06:29:33+08:002016-08-31T06:29:33+08:00

    简短的回答:

    ' MyReportAcct ' SQL 登录的 SID在每个服务器实例上都不同。

    长答案:

    该master数据库包含每个 SQL Server 实例的安全数据库(想想数据库服务器的 Active Directory)。在这种情况下,我们有两个不同的master数据库,因为它是一个镜像对。每次创建 SQL 登录时,都会随帐户创建一个不同的 SID,这与 Active Directory 一直以来的工作方式没有什么不同。

    当镜像数据库故障转移时,数据库中的 SID 与存储在master主体服务器 ( SERVER1 ) 的数据库中的 SID 匹配,而不是镜像服务器 ( SERVER2 )。这种自然且默认的故障转移过程会导致 SQL 登录 ( MyReportAcct ) 成为主体服务器 ( SERVER1 ) 上的孤立帐户。每次发生故障转移时都会发生此孤立过程。SQL 登录权限的开始是它们被创建的实例 ( SERVER1 )。到镜像服务器 ( SERVER2 ) 的故障转移现在是不同的权限开始,因此 SID 将不同,因此报告失败的原因。

    解决方案:

    • 每次都使用相同的 SID创建 SQL 登录“ MyReportAcct ”。此过程需要由sysadmin.
    • 创建一个名为“ uic\MyReportAcct ”的 Active Directory 服务帐户。这样,SID 由 AD 管理,我们再也不用担心上述问题了。
    • 3
  2. Louie
    2016-09-12T00:47:45+08:002016-09-12T00:47:45+08:00

    对我来说听起来像是一个孤立的用户。SID 不匹配。您可以使用以下存储过程来修复孤立登录:

    USE DatabaseName
    GO
    
    EXEC sp_change_users_login 'update_one', 'MyReportAcct', 'MyReportAcct'
    GO
    

    也许您可以创建一个常规作业来同步生产/DR 数据库实例之间的登录,并检查和修复孤立帐户,如下所述: http ://www.msbicoe.com/post/2012/04/05/Automatically-Transfer- and-Synchronize-SQL-Server-logins-SIDs-Passwords-and-Permissions.aspx

    • 2

相关问题

  • 什么是 SQL Server“德纳利”?什么是新的?

  • 在 Oracle 中执行 PL/SQL 工作的应用程序开发人员的安全性

  • 基于用户的不同登录凭据

  • 存储过程可以防止 SQL 注入吗?

  • 保护数据库密码

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve