添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

介绍 ( Introduction )

Sometimes, we need to drop a SQL Server Login because we gave an access to a person who left, this login was used by an application that has been decommissioned for example.

有时,我们需要删除SQL Server登录名,因为我们授予了一个离开的人访问权限,例如,该登录名已由已停用的应用程序使用。

To do so, we can use SQL Server Management Studio (SSMS) as follows:

为此,我们可以如下使用SQL Server Management Studio(SSMS):

  • Open SSMS

    打开SSMS

  • Connect to a SQL Server instance

    连接到SQL Server实例

  • No matter the path you followed, if everything went OK, your login is now dropped. But, as SSMS stated, you may have left a few things inside your databases. If there were mappings between this login and one or more database users (one per database), these users are still there.

    无论您走的是什么路径,如果一切顺利,现在将删除您的登录名。 但是,正如SSMS所说,您可能在数据库中留下了一些东西。 如果此登录名与一个或多个数据库用户(每个数据库一个)之间存在映射,则这些用户仍然存在。

    We can come to that situation too when we restored one or more databases from a SQL Server instance (source server) to another server (destination server) where all logins mapped to these databases are not created on a destination server, or they are created but with different SID. Anyway, if you came to the situation you expected then it’s ok, but if not, it’s mandatory to carefully consider the advice in that warning that says we need to transfer ownership of schemas to another user.

    当我们将一个或多个数据库从SQL Server实例(源服务器)还原到另一台服务器(目标服务器)时,我们也遇到这种情况,其中映射到这些数据库的所有登录名都没有在目标服务器上创建,或者创建了,但是创建了具有不同的SID。 无论如何,如果您遇到了您所期望的情况,那是可以的,但是如果没有,则必须仔细考虑警告中的建议,该建议表明我们需要将架构所有权转让给另一位用户。

    But there are also cases where these steps will fail. For instance, if the login you want to drop is set as a database owner for one or more databases. It that case, you’ll get following screens in SSMS:

    但是在某些情况下,这些步骤也会失败。 例如,如果您要删除的登录名被设置为一个或多个数据库的数据库所有者。 在这种情况下,您将在SSMS中获得以下屏幕:

    In this article, we’ll try to drop a SQL Server Login and all its dependencies using T-SQL statements. This test and its conclusions will provide us relevant information that we can use if we are willing to automate this task or at least some parts of it.

    在本文中,我们将尝试使用T-SQL语句删除SQL Server登录名及其所有依赖项。 该测试及其结论将为我们提供相关信息,如果我们愿意自动执行此任务或其至少某些部分,可以使用这些信息。

    In the following sections, we will first define and build a test case. Our objective will be to drop a SQL Server Login [ApplicationSQLUser1] and its corresponding databases users, both called [UserA] . We’ll first start trying to remove [UserA] database user from [Db1] database. Once we managed to perform this task, we’ll review the steps we followed and consider their appropriate sequencing. Once this is done, we’ll consider the removal of the login itself and also enlist the actions that have to be done.

    在以下各节中,我们将首先定义并构建一个测试用例。 我们的目标是删除SQL Server登录名 [ApplicationSQLUser1] 及其对应的数据库用户,都称为 [UserA] 。 我们将首先开始尝试从 [Db1] 数据库中删除 [UserA] 数据库用户。 一旦我们成功执行了此任务,我们将回顾我们遵循的步骤并考虑其适当的顺序。 完成此操作后,我们将考虑删除登录名本身,并征集必须执行的操作。

    测试用例情况 ( Test case situation )

    Explanation

    In this section, we will present the situation to which we will refer in this article where we want to drop a SQL Server login called [ApplicationSQLUser1] , that is mapped to two SQL Server databases, [Db1] and [Db2] . This mapping is done between this login a database user called [UserA] in [Db1] and [dbo] in [Db2] . Actually, database [Db2] is owned by [ApplicationSQLUser1] login. There is also another login called [ApplicationSQLUser2] that is mapped to [UserB] in [Db1] database.

    在本节中,我们将介绍在本文中要引用的情况,我们要删除一个名为 [ApplicationSQLUser1] SQL Server登录名,该登录名已映射到两个SQL Server数据库 [Db1] [Db2] 。 此映射是在登录名 [Db1]中的 [UserA ] [Db2]中的 [dbo] 的数据库用户之间完成的。 实际上,数据库 [Db2] [ApplicationSQLUser1] 登录名拥有。 还有另一个名为 [ApplicationSQLUser2]的 登录名,该登录名已映射到 [Db1] 数据库中的 [UserB]

    There are some other important facts:

    还有其他一些重要事实:

  • [ApplicationSQLUser1] login is the owner of [ApplicationSQLUser1] 登录名是 [Db3] database [Db3] 数据库的所有者
  • [ApplicationSQLUser1] login is granted [ApplicationSQLUser1] 登录名被授予 CONNECT SQL permission and can grant it to any SQL Server Login. CONNECT SQL 权限,并且可以将其授予任何SQL Server登录名。
  • [ApplicationSQLUser1] login granted [ApplicationSQLUser1] 登录授予 CONNECT SQL permission to CONNECT SQL 权限 [ApplicationSQLUser2] login [ApplicationSQLUser2] 登录
  • [ApplicationSQLUser1] login is the owner of a Server Role called [ApplicationSQLUser1] 登录名是名为 [ServerRoleOwnedByUser1] . [ServerRoleOwnedByUser1] 的服务器角色的所有者。
  • [Db1] dat
  • 介绍 (Introduction) Sometimes, we need to drop a SQL Server Login because we gave an access to a person who left, this login was used by an application that has been decommissioned for example. 有...   用户、组或角色 'XXX' 在当前 数据库 中已存在。   解决方法:   首先介绍一下 sql server 中“登录”与“用户”的区别,“登录”用于用户身份验证,而 数据库 “用户”帐户用于 数据库 访问和权限验证。登录通过安全识别符 (SID) 与用户关联。   将 数据库 恢复到其他服务器时, 数据库 中包含一组用户和权限,但此时 数据库 服务器没有与这一组用户关联的 登录名 。这种情况被称为存在“孤立用户”。此时不能通过新建登录或者是对同名登录授予对应 数据库 的“用户”权限来解决登录问题,因为 SQL Server 会报出“错误15 我可以通过右键单击列条目(dbo.tlkpRolleKontakt> Columns> fkKeywordRolleKontakt)(在MS SQL Server Manager中)生成一个脚本来 删除 列,选择“修改和 删除 列”。然后表设计师>生成更改脚本生成必要的命令: ALTER TABLE dbo.T_SAL_ORDER DRO.. 这里只讨论与 数据库 有关的用户身份验证和用户权限管理等技术。 SQLServer 的自主存取控制模式中,用户访问 数据库 数据都要经过三个安全认证过程 第一个过程确认用户是否是 数据库 服务器的合法账户(具有 登录名 ); 第二个过程确认用户是否是所访问的 数据库 的合法用户(是 数据库 用户); 第三个过程确认用户是否具有合适的操作权限(权限认证)。这个过程的示意图如图11-2所示。 用户在登录到 数据库 服务器后,还是不能访问任何用户 数据库 ,须经第二步认证,让用户成为某个 数据库 的合法用户。用户成为 数据库 合法用户之后,
    SQL Server 跨服务器查询是指在一个 SQL Server 数据库 中执行查询操作来访问另外一个 SQL Server 数据库 中的数据。这种查询可以在不同的物理服务器上的不同 数据库 之间进行。 实现跨服务器查询主要 依赖 SQL Server 的分布式查询功能。下面是实现跨服务器查询的步骤: 1. 配置服务器链路:首先需要在源服务器和目标服务器之间创建一个服务器链路。这可以通过使用sp_addlinked server 系统存储过程在源服务器上创建一个目标服务器的链接来实现。链路名称和目标服务器的地址都需要被指定。 2. 配置远程登录:为了能够在源服务器和目标服务器之间进行通信,需要在目标服务器上配置远程登录。这可以通过使用sp_addlinkedsrvlogin系统存储过程来实现。 3. 编写查询语句:在源服务器上编写查询语句,使用四段名来引用目标服务器上的表。四段名由服务器名称、 数据库 名称、模式名称和表名称组成。 4. 执行查询:最后,在源服务器上执行查询语句。查询将会在源服务器上执行,并且通过服务器链路将查询结果传输到目标服务器上。 需要注意以下几点: - 执行跨服务器查询可能会影响性能,尤其是当涉及到大量数据传输时。 - 对于连接到其他 数据库 管理系统的 SQL Server ,可能需要使用其他函数和方法进行连接和查询。 - 需要在网络连接可靠性和安全性方面特别注意。 总之, SQL Server 跨服务器查询允许我们在不同的 SQL Server 数据库 之间获取数据,并且通过服务器链路实现数据传输和通信。这对于需要在多个 数据库 之间共享数据的业务场景非常有用。