`
izuoyan
  • 浏览: 9223289 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

怎么样才能导出非固定角色执行语句权限的脚本

阅读更多

企业管理器-所有任务-生成SQL脚本,常规选项卡中单击"全部显示",选中"编写全部对象脚本",在"设置格式"选项卡中,取消选中"为每个对象生成Create命令",“为每个对象生成drop命令”.在"选项"选项卡中,选中"编写数据库用户和数据裤脚色脚本","编写对象级别权限的脚本",确定

using the‘Generate Scripts’ option in Enterprise Manager. If you choose the
option to ‘script all objects’ on the General Tab, then remove the
‘Create’ and ‘Drop’ options from the Formatting Tab and then select
‘Script object level permissions’ from the Options Tab, you should just
end up with just the permissions scripts
-------------------------------------------------------------------
DECLARE @DatabaseRoleName [sysname]
SET @DatabaseRoleName = 'createrole' --角色名

SET NOCOUNT ON
DECLARE
@errStatement [varchar](8000),
@msgStatement [varchar](8000),
@DatabaseRoleID [smallint],
@IsApplicationRole [bit],
@ObjectID [int],
@ObjectName [sysname]

SELECT
@DatabaseRoleID = [uid],
@IsApplicationRole = CAST([isapprole] AS bit)
FROM [dbo].[sysusers]
WHERE
[name] = @DatabaseRoleName
AND
(
[issqlrole] = 1
OR [isapprole] = 1
)
AND [name] NOT IN
(
'public',
'INFORMATION_SCHEMA',
'db_owner',
'db_accessadmin',
'db_securityadmin',
'db_ddladmin',
'db_backupoperator',
'db_datareader',
'db_datawriter',
'db_denydatareader',
'db_denydatawriter'
)

IF @DatabaseRoleID IS NULL
BEGIN
IF @DatabaseRoleName IN
(
'public',
'INFORMATION_SCHEMA',
'db_owner',
'db_accessadmin',
'db_securityadmin',
'db_ddladmin',
'db_backupoperator',
'db_datareader',
'db_datawriter',
'db_denydatareader',
'db_denydatawriter'
)
SET @errStatement = 'Role ' + @DatabaseRoleName + ' is a fixed database role and cannot be scripted.'
ELSE
SET @errStatement = 'Role ' + @DatabaseRoleName + ' does not exist in ' + DB_NAME() + '.' + CHAR(13) +
'Please provide the name of a current role in ' + DB_NAME() + ' you wish to script.'

RAISERROR(@errStatement, 16, 1)
END
ELSE
BEGIN
SET @msgStatement = '--Security creation script for role ' + @DatabaseRoleName + CHAR(13) +
'--Created At: ' + CONVERT(varchar, GETDATE(), 112) + REPLACE(CONVERT(varchar, GETDATE(), 108), ':', '') + CHAR(13) +
'--Created By: ' + 'Ldyia ' + CHAR(13) +
'--Add Role To Database' + CHAR(13)
IF @IsApplicationRole = 1
SET @msgStatement = @msgStatement + 'EXEC sp_addapprole' + CHAR(13) +
CHAR(9) + '@rolename = ''' + @DatabaseRoleName + '''' + CHAR(13) +
CHAR(9) + '@password = ''{Please provide the password here}''' + CHAR(13)
ELSE
BEGIN
SET @msgStatement = @msgStatement + 'EXEC sp_addrole' + CHAR(13) +
CHAR(9) + '@rolename ''' + @DatabaseRoleName + '''' + CHAR(13)
PRINT 'GO'
END
SET @msgStatement = @msgStatement + '--Set Object Specific Permissions For Role'
PRINT @msgStatement

SELECT
DISTINCT([sysobjects].[id]),
'[' + USER_NAME([sysobjects].[uid]) + '].[' + [sysobjects].[name] + ']' as 'Object'
INTO #
FROM [dbo].[sysprotects]
LEFT JOIN [dbo].[sysobjects]
ON [sysprotects].[id] = [sysobjects].[id]
WHERE [sysobjects].[id] is not null
AND [sysprotects].[uid] = @DatabaseRoleID

INSERT # SELECT 0,@DatabaseRoleName

DECLARE _sysobjects
CURSOR
LOCAL
FORWARD_ONLY
READ_ONLY
FOR
SELECT * FROM #

OPEN _sysobjects
FETCH
NEXT
FROM _sysobjects
INTO
@ObjectID,
@ObjectName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @msgStatement = ''
IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseRoleID AND [action] = 193 AND [protecttype] = 205)
SET @msgStatement = @msgStatement + 'SELECT,'
IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseRoleID AND [action] = 195 AND [protecttype] = 205)
SET @msgStatement = @msgStatement + 'INSERT,'
IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseRoleID AND [action] = 197 AND [protecttype] = 205)
SET @msgStatement = @msgStatement + 'UPDATE,'
IF EXISTS(SELECT * FROM [dbo].[sysprotects] WHERE [id] = @ObjectID AND [uid] = @DatabaseRoleID AND [action] = 196 AND [protecttype] = 205)
SET @msgStatement = @msgStatement + 'DELETE,'
IF EXISTS(SELECT

分享到:
评论

相关推荐

    SQL脚本导出器(可直接导出成insert形式的语句)

    1. 数据导出:SQL脚本导出器的主要功能是将数据库表中的数据转化为一系列的INSERT语句,这些语句可以直接在SQL Server中执行,以插入相同的数据到目标数据库。 2. 自定义格式:用户可以根据需求定制INSERT语句的...

    Windows计划任务配置定期执行SQL脚本对数据库数据自动导出删除及压缩

    在IT领域,尤其是在数据库管理和自动化运维中,"Windows计划任务配置定期执行SQL脚本对数据库数据自动导出删除及压缩"是一项重要的技能。这涉及到Windows操作系统中的任务调度器(Task Scheduler)以及SQL语言的运用...

    Oracle导出INSERT语句V1.1

    1. **权限检查**:确保拥有足够的数据库权限执行SELECT和DML操作。 2. **数据安全**:在导出数据之前,评估数据敏感性,避免泄露敏感信息。 3. **空间需求**:生成的INSERT语句文件可能会很大,确保有足够的磁盘空间...

    导出SQL数据为Insert语句

    综上所述,“导出SQL数据为Insert语句”是一项实用的技术,通过SSMS、T-SQL脚本或其他工具,我们可以方便地将数据库中的数据转换为可执行的Insert语句,从而实现数据的灵活迁移和操作。在实际工作中,应根据具体需求...

    SQLServer数据库表中数据导出成SQL语句工具

    在SQL Server数据库管理中,有时候我们需要将数据库表中的数据导出为SQL语句,以便于备份、迁移或者在其他环境中重建相同的数据结构和内容。针对这个需求,存在一种名为“SQLServer数据库表中数据导出成SQL语句工具...

    sql server导出语句

    在SQL Server中,导出插入语句是一种常见的数据管理和迁移操作。这通常涉及到获取数据库中的表结构信息,并生成对应的INSERT语句,以便在其他数据库环境中重新创建同样的数据。以下是对这个主题的详细解释: 首先,...

    DB2和ORACLE数据库导出表结构空间和存储过程脚本。

    2. **ExportDB.bat**: 这个批处理文件很可能是执行实际导出操作的脚本。它可能调用了上述提到的DB2和Oracle的命令行工具,以导出表结构、存储过程和表空间信息。用户运行这个文件时,应该会生成相应的DDL和PL/SQL...

    mysql批量导出建表语句.zip

    MySQL批量导出建表语句是一项常见的数据库管理任务,它涉及到数据库备份、迁移或复制到新的环境。在本例中,"mysql批量导出建表语句.zip" 是一个压缩包,包含了一种使用Kettle(也称为Pentaho Data Integration,...

    一些关于SQL导入导出的执行语句

    在数据库管理中,SQL(Structured ...综上所述,SQL导入导出语句在数据库管理中扮演着至关重要的角色,涵盖了数据交换、备份恢复、系统迁移等多个方面。理解并熟练运用这些语句能有效提升数据库管理效率和数据安全性。

    sqlserver 导出表及字段说明脚本.rar

    这个压缩包"sqlserver 导出表及字段说明脚本.rar"包含了一个名为"sqlserver 导出表及字段说明脚本.sql"的文件,这通常是一个用于生成SQL语句的脚本,用于描述数据库中的表结构以及各字段的详细信息。以下是对这个...

    把数据库中的数据导出为sql脚本

    当我们将数据库中的数据导出为SQL脚本时,实际上是在创建一系列的CREATE、INSERT、ALTER等SQL语句,这些语句可以重新构建和填充数据库结构及数据。 在标题提到的"MSSQL2.exe"文件中,我们可以推测这可能是一个针对...

    DB2数据库自动导出数据SQL脚本工具

    4. **数据库权限管理**:确保执行导出操作的用户有合适的权限,避免权限不足导致的失败。 5. **文件系统交互**:工具需要与操作系统进行交互,将生成的SQL脚本或导出数据写入文件系统。 6. **错误处理和日志记录**:...

    从SQLServer数据库导出SQL语句

    - 配置选项,如脚本的目标版本、是否包括权限、排序规则等。 - 完成设置后,点击“下一步”,选择保存脚本的位置和文件名,然后点击“完成”生成SQL脚本文件。 2. **使用T-SQL命令**: 对于自动化或编程需求,...

    数据库数据导出工具(可同时导出结构和数据的SQL脚本).rar

    它能够帮助用户不仅导出数据库的结构,还能同时导出实际的数据,形成可执行的SQL脚本。 SQL脚本是一种基于SQL语言的文本文件,包含了创建数据库表、视图、存储过程等数据库对象的命令,以及插入、更新、删除等数据...

    基于ssh框架的mysql数据库导出脚本

    - 导出数据:可以使用`mysqldump`命令行工具,或者在Java代码中通过JDBC执行SQL语句实现数据的导出。例如,可以编写一个批处理脚本来导出整个数据库,或者特定的表。 3. **自定义脚本**: - 在SSH框架中,可以...

    数据库工具(导出SQL脚本)

    "数据库工具(导出SQL脚本)"这一主题主要关注如何利用这些工具将数据库中的数据和结构转换为可执行的SQL脚本,以便于数据的迁移、备份或共享。以下是关于这个主题的详细解释: 一、SQL脚本的重要性 SQL...

    SQL Server 数据库脚本导出器.rar

    SQL Server数据库脚本导出器是一款专为Microsoft SQL Server设计的实用工具,它允许用户方便地将数据库结构、数据以及对象脚本化为文本文件,以便于备份、迁移或者在不同环境之间同步数据库。这个工具对于数据库管理...

    oracle 导出xls文件数据的脚本

    - 文件权限:确保脚本有读写目标目录的权限,否则可能会导致导出失败。 - 表格结构:外部表的结构需要与源Oracle表匹配,否则可能导致数据导入错误。 - 文件大小:XLS文件有大小限制,如果数据量大,可能需要分...

    用SELECT… INTO OUTFILE语句导出MySQL数据的教程

    这意味着,只有拥有该权限的用户才能执行此类操作。 5. **安全性**: 输出文件必须不存在,以防止覆盖已存在的重要文件。生成的文件默认是世界可读的,并归MySQL服务器所有,这可能会导致访问控制问题。 6. **...

Global site tag (gtag.js) - Google Analytics