分类目录归档:MSSQL

[转]使用sp_change_users_login修复产生的孤立账户

转自:http://www.veryhuo.com/a/view/12537.html

我们通常所说的“孤立用户”,就是孤立帐户,是指某个数据库的帐户只有用户名而没有登录名,这样的用户在用户库的sysusers系统表中存在,而在master数据库的syslogins中却没有对应的记录。

孤立帐户的产生一般是一下两种:

1.将备份的数据库在其它机器上还原;

2.重装系统或SQL SERVER之后只还原了用户库

解决方法:

解决方法是使用sp_change_users_login来修复。

sp_change_users_login的用法有三种

修复方法:

步骤1:

exec sp_change_users_login ‘REPORT’

列出当前数据库的孤立用户

步骤2:

exec sp_change_users_login ‘AUTO_FIX’,’用户名’

可以自动将用户名所对应的同名登录添加到syslogins中

步骤3:

exec sp_change_users_login ‘Update_ONE’,’用户名’,’登录名’

将用户名映射为指定的登录名。

C#编写SQL Server 2005/2008存储过程

大致分为两个步骤:

1. 用C#开发类库

建立一个普通的类库项目,下面是一个实例:

   using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.SqlServer.Server;
    namespace com.shangsi.ShsSqlUtility
    {
        public class SqlEncoding
        {
            public SqlEncoding()
            {

            }
            [SqlFunction(DataAccess = DataAccessKind.None)]
            /// <summary>
            /// 内码转换
            /// </summary>
            /// <param name="encode"></param>
            /// <returns></returns>
            public static string ConvertPageCode(string OriginalStr, int FromCodePage, int ToCodePage)
            {
                if (OriginalStr == null) return null;

                OriginalStr = OriginalStr.Trim();
                if (OriginalStr == "") return "";

                Encoding TargetEncoding = Encoding.GetEncoding(ToCodePage);
                Encoding OriginalEncoding = Encoding.GetEncoding(FromCodePage);//("iso8859-1"); //在SQL Server 查询分析器中输入sp_helpsort 可以看到SQL Server存储使用的字符集合
                Byte[] OriginalBytes = OriginalEncoding.GetBytes(OriginalStr);
                return TargetEncoding.GetString(OriginalBytes);
            }
        }
    }

2. 把函数注册到SQL Server中

drop assembly [com.shangsi.ShsSqlUtility]

create assembly [com.shangsi.ShsSqlUtility]
FROM 'd:\lib\ShsSqlUtility.dll'

drop function ConvertCP
CREATE FUNCTION ConvertCP(@OriginalStr nvarchar(1000),@FromCodePage int, @ToCodePage int) 
RETURNS nvarchar(800)
AS
External name [com.shangsi.ShsSqlUtility].[com.shangsi.ShsSqlUtility.SqlEncoding].ConvertPageCode

EXEC sp_configure 'clr enabled',1
go
RECONFIGURE 
go

select dbo.ConvertCP(null, 936, 1252)

如果不支持“Extrnal”需更改数据库的兼容性至少到SQL Server2005