当前位置: 首页 > 面试题库 >

SQL将登录名映射到现有用户

高建本
2023-03-14
问题内容

我最近将开发环境从SQL 2000升级到了SQL 2008 R2。我已经完成了生产数据库的备份,并将其还原为新的开发服务器。

我已经在开发服务器上创建了一个登录名,该登录名反映了我在生产服务器上使用的登录名,但是无法将其映射到数据库中的“
dbo”用户。当我在“用户映射”中编辑登录名的属性时,将用户替换为“ dbo”,并且出现以下错误:

标题:用户’dbo’的Microsoft SQL Server Management
Studio创建失败。(Microsoft.SqlServer.Smo)执行Transact-
SQL语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo)用户,组或角色’dbo’在当前数据库中已经存在。(Microsoft
SQL Server,错误:15023)

那么,如何将登录名映射到现有用户?


问题答案:

若要使用户与登录名一致,可以使用系统存储过程sp_change_users_login。

sp_change_users_login [ @Action = ] 'action'
[ , [ @UserNamePattern = ] 'user' ] 
[ , [ @LoginName = ] 'login' ] 
[ , [ @Password = ] 'password' ];

例如:

EXEC sp_change_users_login 'Update_One','User123','User123'

如果您有许多不同步的用户,则可以使用光标拉出所有用户并为他们运行此命令。对不同步的用户运行此操作不会有任何不利影响,它将修复所有孤立的用户。

DECLARE @sql NVARCHAR(MAX);
DECLARE curSQL CURSOR
FOR
       SELECT   'EXEC sp_change_users_login ''UPDATE_ONE'', ''' + name + ''', ''' + name + ''''
       FROM     sysusers
       WHERE    issqluser = 1
                AND name NOT IN ( 'guest', 'dbo', 'sys', 'INFORMATION_SCHEMA' )
OPEN curSQL
FETCH curSQL INTO @sql
WHILE @@FETCH_STATUS = 0 
     BEGIN
           EXEC (
           @sql
           )
           FETCH curSQL INTO @sql
     END
CLOSE curSQL
DEALLOCATE curSQL

这必须在您需要用户固定的数据库上下文中运行。



 类似资料:
  • 问题内容: 是否有SQL Server命令将单个数据库的 用户 连接到同名数据库服务器的 登录 名? 例如: 数据库服务器-默认实例 数据库:TestDB 服务器登录 -TestUser TestDB上的现有用户-TestUser 如果我尝试使登录名成为数据库的用户,则“用户,组或角色”已经存在。 有人知道将数据库 用户 分配给服务器 登录名 的简便方法吗? 问题答案: 该 新 方法(SQL 20

  • 问题内容: 我想将a存储在列中并保持不变。这两个和是“本地”类型的定义。因此, 时区 的概念不应以任何方式干涉。 下面的代码是一个最小示例,该示例在内存数据库中创建带有列的表。Maven工件必须在类路径中。 首先,定义方法和: 请注意,该方法使用单引号引起来的值,因此Java™没有机会创建时区歧义。现在,一次调用几次,每次使用不同的时区设置: 然后打印以下内容: 假设数据库表未更改,如何编写该方法

  • 我在两个不同的依赖项DependencyA和DependencyB中有两个类TableNameA和TableNameB,它们表示表table_name_a和table_name_b,字段如下所述。 如上所述,我正在使用jooq,并且我想将table_name_a和table_name_b记录映射到TableNameA和TableNameB类中,但是在TableNameA的对象中,只有“FIELD”

  • 问题内容: 无论如何,我可以在现有的Elasticsearch映射中重命名元素而不必添加新元素?如果是这样,为了避免破坏现有映射,最好的方法是什么? 例如从fieldCamelcase到fieldCamelCase 问题答案: 您可以通过创建一个Ingest管道来做到这一点,该管道包含一个Rename Processor 和Reindex API 。 请注意,您需要运行Elasticsearch

  • 我有两个表:TABLE_A和TABLE_B,它们有一些同名的列。 我想从这两个表中检索所有列,并使用Jooq将查询结果转换为Pojo类,如下所示: 我想使用@Column注释来指定哪个列来自哪个表,但Jooq似乎不支持这个特性。我如何实现这一点? 或者这个,

  • 问题内容: 我有一个FlagsAttribute按位枚举,像这样- 现在,在C#中,我将此值存储在一个名为MyProperty的属性中,并保存后将此属性写入我的SQL数据库的整数列中。假设如果我从代码中选择,那么它将在数据库中另存为。 我知道我可以从数据库获取值,只需要将int值类型转换为MyEnum,它将为我提供这些值。但是,我希望对某些存储过程中的SQL数据执行一些操作,在这些存储过程中,显然