mssql 表 登陆名 修改

一,修改数据库远程登录帐号(当然也可以手工在sql数据库内建设)

use abc

go

exec sp_change_users_login ‘update_one‘,‘abc_f‘,‘abc_f‘

go

数据库导入完成后,还有一个地方需要确认,就是一般客户的表格以及存储过程的属主都是默认的dbo,在这种权限下,用户abc_f对表格是具有读写权限的,可以添加删除表格,但是无法更改现有属主为dbo的表格的表结构,对于存储过程,abc_f没有任何读写执行权限,这就可能造成用户程序出现问题。

从原理讲,解决方法有二,扩大数据库用户的权限,或者将这些表格and存储过程的属主修改为abc_f,前种方法涉及安全问题,不允许做此类操作,所以只能使用后种方法。

二,基本修改对象属主的存储过程使用方法如下:

use abc

go

exec sp_changeobjectowner ‘tablename‘,‘abc_f‘

go

三,上述语句只能更改单个对象,无法实现批量修改,不过对于表格,SQL Server自带一个遍历表格的存储过程sp_msforeachtable,对于修改所有表格属主的语句如下:

use abc

go

sp_msforeachtable ‘sp_changeobjectowner ‘‘?‘‘,‘‘abc_f‘‘‘

go

注意对于引号里面字段需要使用两个单引号来界定。

四,如果客户数据库没有存储过程以及其他对象,完成上述操作后,应该可以发现客户数据库所有表格属主都已经替换为客户的用户,这样就可以对表格作任何修改。如果客户数据库还含有存储过程等其他对象,因为SQL Server本身没有提供类似msforeachprodure的存储过程,所以不能批量修改这类对象。解决办法是使用自己写存储过程来实现,下面代码可以建立一个msforeachobject的存储过程,用于遍历数据库中的各种对象,只需将这段代码放入查询分析器执行即可。

USE MASTER

GO

CREATE proc sp_MSforeachObject

@objectType int=1,

@command1 nvarchar(2000),

@replacechar nchar(1) = N‘?‘,

@command2 nvarchar(2000) = null,

@command3 nvarchar(2000) = null,

@whereand nvarchar(2000) = null,

@precommand nvarchar(2000) = null,

@postcommand nvarchar(2000) = null

as

/* This proc returns one or more rows for each table (optionally, matching @where), with each table defaulting to its

own result set */

/* @precommand and @postcommand may be used to force a single result set via a temp table. */

/* Preprocessor won‘t replace within quotes so have to use str(). */

declare @mscat nvarchar(12)

select @mscat = ltrim(str(convert(int, 0x0002)))

if (@precommand is not null)

exec(@precommand)

/* Defined @isobject for save object type */

Declare @isobject varchar(256)

select @isobject= case @objectType when 1 then ‘IsUserTable‘

when 2 then ‘IsView‘

when 3 then ‘IsTrigger‘

when 4 then ‘IsProcedure‘

when 5 then ‘IsDefault‘

when 6 then ‘IsForeignKey‘

when 7 then ‘IsScalarFunction‘

when 8 then ‘IsInlineFunction‘

when 9 then ‘IsPrimaryKey‘

when 10 then ‘IsExtendedProc‘

when 11 then ‘IsReplProc‘

when 12 then ‘IsRule‘

end

/* Create the select */

/* Use @isobject variable isstead of IsUserTable string */

EXEC(N‘declare hCForEach cursor global for select ‘‘[‘‘ + REPLACE(user_name(uid), N‘‘]‘‘, N‘‘]]‘‘) + ‘‘]‘‘ + ‘‘.‘‘ + ‘‘[‘‘ +

REPLACE(object_name(id), N‘‘]‘‘, N‘‘]]‘‘) + ‘‘]‘‘ from dbo.sysobjects o ‘

+ N‘ where OBJECTPROPERTY(o.id, ) = 1 ‘+N‘ and o.category & ‘ + @mscat + N‘ = 0 ‘

+ @whereand)

declare @retval int

select @retval = @@error

if (@retval = 0)

exec @retval = sp_MSforeach_worker @command1, @replacechar, @command2, @command3

if (@retval = 0 and @postcommand is not null)

exec(@postcommand)

return @retval

GO

五,上段代码是仿制msforeachtable创建的存储过程,可以用于遍历各种对象,使用方法如下:

use abc

go

EXEc sp_MSforeachObject @command1="sp_changeobjectowner ‘?‘, ‘abc_f‘",@objectType=1

go

最后一个参数objectType代表对象类型,1为表格,2为视图,3为触发器,4为存储过程,7可以修改该客户自己定义的函数。

通过此命令可以将各类对象的属主改为客户的数据库账号,则可以解决上述数据库权限问题

收藏于 2009-04-02

时间: 2024-11-05 14:49:21

mssql 表 登陆名 修改的相关文章

修改 计算机名后,修改SQLserver 注册服务器对象的名称,及登陆名

--查看当前数据库服务器名称: select @@ServerName --查看当前所有数据库服务器名称select * from Sys.SysServers --修改数据库服务器名称sp_dropserver 'old_servername'sp_addserver 'new_servername','local' --重启数据库服务,修改完成 --安全性->登陆名->右键,新建登陆名->选择Windows身份验证

mssqlserver修改表名,列名,添加表列,删除表列,修改表列类型

mssqlserver修改表名,列名,添加表列,删除表列,修改表列类型 ,代码肯定省事的呀 --添加表列 alter table test add address nvarchar(50) null; --删除表列 alter table test drop column address; --修改表列字段类型 alter table test alter column address char(10); --修改表列字段名 exec sp_rename '表名.[列名]', '新的列名', '

织梦重置密码的方法和织梦网站后台登陆账号修改方法

1.打开数据库,找到数据库表名为:dede_admin,单击dede_admin,将 d95a993df018d377fef8,替换为:f297a57a5a743894a0e4   ,这个值表示:admin就是织梦的默认密码.替换后保存. 2.将radminpass.php上传网站根目录,访问域名/radminpass.php 3.登录网站后台修改 4.织梦网站后台登陆账号修改方法     update dede_admin set userid='admin' where id=1     执

【Oracle】表空间容量修改

1 -- 查看表空间容量 2 SELECT UPPER(F.TABLESPACE_NAME) "表空间名", 3 D.TOT_GROOTTE_MB "表空间大小(M)", 4 D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)", 5 TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') &qu

mssql数据库添加,修改,删除字段

通用式: alter table [表名] add [字段名] 字段属性 default 缺省值 default 是可选参数 增加字段: alter table [表名] add 字段名 smallint default 0 增加数字字段,整型,缺省值为0 alter table [表名] add 字段名 int default 0 增加数字字段,长整型,缺省值为0 alter table [表名] add 字段名 single default 0 增加数字字段,单精度型,缺省值为0 alter

SQL数据库表结构的修改(sql2005)

一 .ALTER TABLE命令 ALTER TABLE 语句用于在已有的表中添加.修改或删除列. 二.添加列 语法 :ALTER TABLE table_name ADD column_name datatype eg: ALTER TABLE Persons ADD P_Names VACHAR(50) NOT NULL 三.修改列 3.1修改字段varchar(50)为datetime,允许空eg:  ALTER TABLE Persons ALTER COLUMN  P_Names da

Mysql复制表结构、表数据以及修改主键

mysql查看表结构命令 show columns from 表名; 1.复制表结构及数据到新表 CREATE TABLE 新表SELECT * FROM 旧表 这种方法会将oldtable中所有的内容都拷贝过来,当然我们可以用delete from newtable;来删除. 不过这种方法的一个最不好的地方就是新表中没有了旧表的primary key.Extra(auto_increment)等属性.需要自己用"alter"添加,而且容易搞错.     2.只复制表结构到新表 CRE

DDL 数据库定义语言--库创建/修改/删除--表的创建/修改/删除/复制

/*进阶 11 DDL 数据库定义语言 库和表的管理 一:库的管理:创建/修改/删除 二:表的管理:创建/修改/删除 创建: CREATE DATABASE [IF NOT EXISTS] 库名; 修改: alter 删除: DROP DATABASE [IF EXISTS] 库名; */ #一 : 库的管理 #1 库的创建 CREATE DATABASE books; CREATE DATABASE IF NOT EXISTS books; #2/库的修改 #库名的修改,需要停止服务器,然后修

EnablePrefetcher注册表项的修改与电脑提速

前些天在图书馆找教材,偶然发现一本windows dos命令应用技巧的书,发现了几个有用的注册表项 EnablePrefetcher这个注册表项是windows用来控制系统预读取数据开放程度的参数,其值范围为0-3,但windows在这方面的默认想比较保守,多数电脑的默认值为2. 所以如果电脑配置还可以的,可以将之修改为3,可以整体提高电脑速度,从开机时间和刷新频率就能看出来~ 具体操作如下: ctrl + R 打开run,输入regedit打开注册表,依次选HKEY_LOCAL_MACHINE