SQLServer · 最佳实践 · RDS for SQLServer 2012权限限制提升与改善

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 背景SQL Server 作为一种强大的关系型数据库,能够提供所有场景的应用。在绝大多数云计算公司中,都提供了SQL Server作为服务的云数据库服务,譬如阿里云。但既然是服务,那么服务就需要可管理,可控制,因此,在云计算初期,都对云数据库服务进行了严格的权限控制,好处就是可控可管理,但给用户会带来一些限制,某些限制实际上是可以再细粒度管控。因此,今天我们就要介绍一下阿里云数据库SQL Ser

背景

SQL Server 作为一种强大的关系型数据库,能够提供所有场景的应用。在绝大多数云计算公司中,都提供了SQL Server作为服务的云数据库服务,譬如阿里云。但既然是服务,那么服务就需要可管理,可控制,因此,在云计算初期,都对云数据库服务进行了严格的权限控制,好处就是可控可管理,但给用户会带来一些限制,某些限制实际上是可以再细粒度管控。因此,今天我们就要介绍一下阿里云数据库SQL Server 2012在权限限制方面的提升与改善。

用户最关注的权限和使用

根据我们对用户的理解和日常用户的反馈,最常见的需求如下:
1. 需要创建、修改和删除登录和用户的权限
2. 需要创建、修改和删除数据库的权限
3. 数据库上的所有权限
4. 需要结束连接的权限
5. 需要方便读取数据库日志的权限
6. 需要链接服务器权限
7. 需要SQL Server Profiler的跟踪功能
8. 需要Database Engine Tuning Advisor来调校性能

一、 RDS SQL Server 2012权限新增功能使用介绍

我们在SQL Server 2012的版本中,用户的关注是我们改进和提升的方向,因此,经过论证与设计,会将这些权限还给用户,让用户有更多的自由选择和方便调试性能、管理自己的数据。那么如何来使用这些功能,我这里会将每个需求都演示一下如何使用(针对阿里云数据库SQL Server 2012):

1. 创建、修改和删除登录和用户的权限

首先,阿里云数据库SQL Server 2012会提供一个根帐户,这个根帐户也可以与你新建帐户的权限一致,但强烈建议你新建一个帐户,根帐户可以修改密码,也可以DISABLE掉,甚至删除掉,你还可以重置根账号。

1.1 创建LOGIN

--check current login user
SELECT SUSER_NAME(),ORIGINAL_LOGIN()

--create login
CREATE LOGIN Test11 
WITH PASSWORD=N'4C9ED138-C8F5-4185-9E7A-8325465CA9B7'

创建登录过程中,会将服务器级、数据库级别等权限授予用户。你会在message(消息)看到下列信息:
1

1.2 更改LOGIN

--create login
ALTER LOGIN Test11 
WITH PASSWORD=N'123',
CHECK_POLICY=OFF

你不能更改你创建的任何之外的LOGIN,否则会出现一下错误:

2

1.3 删除LOGIN

--drop login
DROP LOGIN Test11 

同样你不能删除你创建的任何之外的LOGIN,否则会出现一下错误:
3

1.4 创建USER

你只能在自己新建的用户数据库创建用户,在系统数据库上是无法做操作的, 所以为了演示创建用户,需要先创建一个数据库testdb(稍后介绍具体信息):
使用login test11登录到实例(假如你的密码是123,因为刚才新建的用户已经删除,请重新创建一下)
请注意,如果是当前用户创建数据库,那么就将当前用户设置该数据库的一个用户,并且角色自动分配为db_owner, 你也可为数据库创建其他用户和角色:

USE TestDB
GO
--create user 
CREATE USER [Test] FOR LOGIN [Test] 
--add database role
ALTER ROLE [db_owner] ADD MEMBER [Test]
GO
-- query user name and role name
SELECT 
	dpp.name,dpm.name
FROM sys.database_principals dpp
INNER JOIN sys.database_role_members drm
	ON dpp.principal_id=drm.member_principal_id
INNER JOIN sys.database_principals dpm
	ON dpm.principal_id=drm.role_principal_id
WHERE dpp.name='test'

1.5 更新USER

你可以更改USER,与SQL SERVER原始的操作方式一样,比如更改用户映射的登录,如下:

USE TestDB
GO
ALTER USER test WITH LOGIN=test

1.6 删除USER

你还可以更改USER,与SQL SERVER原始的操作方式一样,如下:

USE TestDB
GO
DROP USER test

二、创建、修改和删除数据库

2.1 创建数据库

正如上面所说,如果是当前用户创建数据库,那么就将当前用户设置该数据库的一个用户,并且角色自动分配为db_owner。如下:

CREATE DATABASE TestDb

你会收到下列消息:

Change database owner to sa sucessfully.  
Create user Test11 and grant db_owner role in database TestDb.

表示当前创建的登录用户是Test11,并且已经分配db_owner角色
注意:
在创建数据库是,你不能随意指定文件路径,你可以不指定任何路径,例如上面的SQL语句,但你也可以指定正确的路径。如果你指定错误的路径,会收到错误提示:

USE [master]
GO

CREATE DATABASE [TestDb_error_path]
 ON  PRIMARY 
( NAME = N'TestDb_error_path', FILENAME = N'E:\KKKK\DDD\\DATA\TestDb_error_path.mdf' )
 LOG ON 
( NAME = N'TestDb_error_path_Log', FILENAME = N'E:\\KKKK\DDD\\DATA\TestDb_error_path_log.ldf')

你会收到下列信息:

Msg 50000, Level 16, State 1, Procedure *******, Line 57
The file path [ 
E:\\KKKK\DDD\\DATA\TestDb_error_path.mdf
E:\\KKKK\DDD\\DATA\TestDb_error_path_log.ldf ] is invalid,please specify correct path folder [ E:\mmm\gggg\ ].
Msg 3609, Level 16, State 2, Line 2
The transaction ended in the trigger. The batch has been aborted.  

显然,这个正确的路径只有E:\mmm\gggg\,其他任何路径都不会创建成功。 这个只是为了规范正确的路径而已,没有其他任何功能限制。

2.2 更改数据库

你可以更改大部分的数据库属性,但有几个地方你需要注意,有些特性是不可以随便更改的,。

2.2.1 不能移动到错误的文件路径

ALTER DATABASE [TestDb]
MODIFY FILE
( NAME = N'TestDb', FILENAME = N'E:\KKKK\DDD\DATA\TestDb.mdf' )

你会得到下列信息:

Msg 50000, Level 16, State 1, Procedure ******, Line 152
The file path [ 
E:\KKKK\DDD\DATA\TestDb.mdf ] is invalid,please specify correct path folder [ E:\mmm\gggg\ ].
Msg 3609, Level 16, State 2, Line 2
The transaction ended in the trigger. The batch has been aborted.

2.3.2 不能将数据库的恢复模式设置为FULL之外的其他模式

ALTER DATABASE [TestDb]
SET RECOVERY SIMPLE

你会得到下列信息:

Msg 50000, Level 16, State 1, Procedure ******, Line 46
Login User [Test11] can't change database [TestDb] recovery model.
Msg 3609, Level 16, State 2, Line 2
The transaction ended in the trigger. The batch has been aborted.

2.3.3 将数据库设置为OFFLINE后,不能直接ONLINE

USE [master]
GO

--set offline
--ALTER DATABASE [TestDb]
--SET OFFLINE
--WITH ROLLBACK AFTER 0

ALTER DATABASE [TestDb]
SET ONLINE

你会得到下列错误信息:

Msg 5011, Level 14, State 9, Line 1
User does not have permission to alter database 'TestDb', the database does not exist, or the database is not in a state that allows access checks.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.  

当前设置为OFFLINE时,也不必惊慌,你可以使用sp_rds_set_db_online存储过程,让数据库ONLINE:

EXEC sp_rds_set_db_online 'TestDb'

2.2 删除数据库

删除数据库没有任何特别之处,但是如果你的数据库没有进行过任何备份,也会提示:

DROP DATABASE [TestDb]

        -------------------------------------------------------------------------------------------------
        Kindly reminder:
            your database [TestDb] does not exist any backup set.
        -------------------------------------------------------------------------------------------------
Login User [Test11] has dropped database [TestDb] .

三、数据库上的所有权限

数据库我们首先设置为db_owner,但是回收了备份等必要的管控机制,现在的数据库级别权限非常的自由,但也是有两面性,权限更多了,那么自己操作的时候就需要更严谨和更仔细,避免导致数据库的使用问题。

四、结束连接的权限

结束连接的权限,我们更通俗地将是KILL权限,RDS SQL Server 2012已经授予这个权限,但是用户只能KILL自己的的连接,用户不要KILL其他连接,比如备份的连接。

KILL (SPID)

五、需要方便读取数据库日志的权限

以前你需要在控制台读取数据库错误日志,现在你可以直接使用存储过程sp_rds_read_error_logs读取错误日志,使用方法与sp_readerrorlog是一样的:

-- eg.1
EXEC sp_rds_read_error_logs
-- eg.2
EXEC sp_rds_read_error_logs 0,1 ,'error'

六、需要链接服务器权限

链接服务器现在还存在两个问题,首先,不能用UI界面去创建链接服务器,UI界面创建链接服务器需要sysadmin权限,可以使用一系列的存储过程创建。第二,由于RDS的设计,不能直接通过DNS和对应的IP创建,具体创建方式,暂时不能提供。但有解决方案。但我们提供了一个简单的一键创建方式:

DECLARE
		@linked_server_name sysname = N'my_link_server',
		@data_source sysname = N'***********',   --style: 10.1.10.1,1433
		@user_name sysname = N'****' ,
		@password nvarchar(128) = N'**********',
		@link_server_options xml
		= N'
			<rds_linked_server>
				<config option="data access">true</config>
				<config option="rpc">true</config>
				<config option="rpc out">true</config>
			</rds_linked_server>
		'
		EXEC sp_rds_add_linked_server
			@linked_server_name,
			@data_source,
			@user_name,
			@password,
			@link_server_options

如下图:
4

message(消息):
The linked server ‘my_link_server’ has set option ‘data access’ to ‘true’.
The linked server ‘my_link_server’ has set option ‘rpc’ to ‘true’.
The linked server ‘my_link_server’ has set option ‘rpc out’ to ‘true’.
create link server ‘my_link_server’ successfully.

七、SQL Server Profiler的跟踪功能

RDS SQL Server 2012的 Profiler功能没有变化,但是不能生成文件到服务器上,因为你不能登录到RDS的实例服务器上。你可以放在表里。在使用SQL Server Profiler功能时,请注尽可能使用多的过滤条件和使用少量的列。

八、Database Engine Tuning Advisor来调校性能

这个功能的使用方法没有办法,不过,绝大多数时,用户不会使用这个功能。只是提供一种可选的方式。

总结

RDS SQL Server在权限方面做了很多改变,能够满足绝大多数用户的使用,性能调优和管理方面的需求。但是权限开放了,也需要用户谨慎使用,比如数据库层面,可以有更多设置了,设置不同的值会对数据库的性能产生不同影响。

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
2月前
|
关系型数据库 MySQL 数据库
MySQL数据库:基础概念、应用与最佳实践
一、引言随着互联网技术的快速发展,数据库管理系统在现代信息系统中扮演着核心角色。在众多数据库管理系统中,MySQL以其开源、稳定、可靠以及跨平台的特性受到了广泛的关注和应用。本文将详细介绍MySQL数据库的基本概念、特性、应用领域以及最佳实践,帮助读者更好地理解和应用MySQL数据库。二、MySQL
127 5
|
3月前
|
SQL 关系型数据库 MySQL
创建包含MySQL和SQLServer数据库所有字段类型的表的方法
创建一个既包含MySQL又包含SQL Server所有字段类型的表是一个复杂的任务,需要仔细地比较和转换数据类型。通过上述方法,可以在两个数据库系统之间建立起相互兼容的数据结构,为数据迁移和同步提供便利。这一过程不仅要考虑数据类型的直接对应,还要注意特定数据类型在不同系统中的表现差异,确保数据的一致性和完整性。
36 4
|
4月前
|
SQL 关系型数据库 数据库
数据库空间之谜:彻底解决RDS for SQL Server的空间难题
【8月更文挑战第16天】在管理阿里云RDS for SQL Server时,合理排查与解决空间问题是确保数据库性能稳定的关键。常见问题包括数据文件增长、日志文件膨胀及索引碎片累积。利用SQL Server的动态管理视图(DMV)可有效监测文件使用情况、日志空间及索引碎片化程度。例如,使用`sp_spaceused`检查文件使用量,`sys.dm_db_log_space_usage`监控日志空间,`sys.dm_db_index_physical_stats`识别索引碎片。同时,合理的备份策略和文件组设置也有助于优化空间使用,确保数据库高效运行。
96 2
|
4月前
|
SQL 关系型数据库 MySQL
“震撼揭秘!Flink CDC如何轻松实现SQL Server到MySQL的实时数据同步?一招在手,数据无忧!”
【8月更文挑战第7天】随着大数据技术的发展,实时数据同步变得至关重要。Apache Flink作为高性能流处理框架,在实时数据处理领域扮演着核心角色。Flink CDC(Change Data Capture)组件的加入,使得数据同步更为高效。本文介绍如何使用Flink CDC实现从SQL Server到MySQL的实时数据同步,并提供示例代码。首先确保SQL Server启用了CDC功能,接着在Flink环境中引入相关连接器。通过定义源表与目标表,并执行简单的`INSERT INTO SELECT`语句,即可完成数据同步。
395 1
|
4月前
|
存储 C# 关系型数据库
“云端融合:WPF应用无缝对接Azure与AWS——从Blob存储到RDS数据库,全面解析跨平台云服务集成的最佳实践”
【8月更文挑战第31天】本文探讨了如何将Windows Presentation Foundation(WPF)应用与Microsoft Azure和Amazon Web Services(AWS)两大主流云平台无缝集成。通过具体示例代码展示了如何利用Azure Blob Storage存储非结构化数据、Azure Cosmos DB进行分布式数据库操作;同时介绍了如何借助Amazon S3实现大规模数据存储及通过Amazon RDS简化数据库管理。这不仅提升了WPF应用的可扩展性和可用性,还降低了基础设施成本。
92 0
|
4月前
|
Java 应用服务中间件 Maven
从零到英雄:一步步构建你的首个 JSF 应用程序,揭开 JavaServer Faces 的神秘面纱
【8月更文挑战第31天】JavaServer Faces (JSF) 是一种强大的 Java EE 标准,用于构建企业级 Web 应用。它提供了丰富的组件库和声明式页面描述语言 Facelets,便于开发者快速开发功能完善且易于维护的 Web 应用。本文将指导你从零开始构建一个简单的 JSF 应用,包括环境搭建、依赖配置、Managed Bean 编写及 Facelets 页面设计。
102 0
|
4月前
|
SQL 关系型数据库 MySQL
【超全整理】SQL日期与时间函数大汇总会:MySQL与SQL Server双轨对比教学,助你轻松搞定时间数据处理难题!
【8月更文挑战第31天】本文介绍了在不同SQL数据库系统(如MySQL、SQL Server、Oracle)中常用的日期与时间函数,包括DATE、NOW()、EXTRACT()、DATE_ADD()、TIMESTAMPDIFF()及日期格式化等,并提供了具体示例。通过对比这些函数在各系统中的使用方法,帮助开发者更高效地处理日期时间数据,满足多种应用场景需求。
507 0
|
4月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
449 0
|
4月前
|
关系型数据库 MySQL 数据库连接
绝对干货!从MySQL5.7平滑升级到MySQL8.0的最佳实践分享
绝对干货!从MySQL5.7平滑升级到MySQL8.0的最佳实践分享
211 0
|
5月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
354 3

相关产品

  • 云数据库 RDS MySQL 版
  • 云数据库 RDS
  • 云数据库 RDS SQL Server 版