Sql Server 2016新功能之Row-Level Security(值得关注)

本文介绍了SQL Server 2016的Row-Level Security功能,该功能通过对表添加过滤函数,让不同用户只能获取符合条件的数据,增加了数据安全性。还列举了该版本的其他新功能特性及重要改进,如PolyBase、AlwaysOn增强功能等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Sql Server 2016 有一个新功能叫 Row-Level Security ,大概意思是行版本的安全策略(原来我是个英语渣_(:з」∠)_)

直接上例子。这个功能相当通过对表添加一个函数作为过滤规则,使得拥有不同条件的用户(或者登录名) 之类的,只能获取到符合条件的数据。相对来说是提供了那么一点的便捷性,当然也增加了数据的安全性,相当于每个用户连接进来只能看到

符合规则的数据(当然,这里的用户只是一个举例。其实是可以通过编写过滤函数来实现的)

举个例子

有三个用户 Sales1 ,Sales 2 ,Manager 3个数据库用户,然后用一个Sales的表来寄存他们的订单记录

CREATE TABLE Sales

(

OrderID int,

SalesRep sysname,

Product varchar(10),

Qty int

);

INSERT Sales VALUES

(1, 'Sales1', 'Valve', 5),

(2, 'Sales1', 'Wheel', 2),

(3, 'Sales1', 'Valve', 4),

(4, 'Sales2', 'Bracket', 2),

(5, 'Sales2', 'Wheel', 5),

(6, 'Sales2', 'Seat', 5);

-- View the 6 rows in the table

SELECT * FROM Sales;

go

 

这是全部表的数据的截图

然后添加3个用户,分别就是Sales1 Sales2 Manager 3个用户,分别对他们的赋予Sales表的查询和删除(用于测试删除功能) 的权限。

CREATE USER Manager WITHOUT LOGIN;

CREATE USER Sales1 WITHOUT LOGIN;

CREATE USER Sales2 WITHOUT LOGIN;

GRANT SELECT,delete ON Sales TO Manager;

GRANT SELECT,delete ON Sales TO Sales1;

GRANT SELECT,delete ON Sales TO Sales2;

然后以下是这个功能的核心部分。首先我们创建一个过滤函数,然后将这个过滤函数添加到这个表的安全策略里面,就可以看到效果了。

函数逻辑很简单,传入一个@SalesRep 的名称,用于匹配当前的 User_Name。匹配了才返回数据

然后下面一行是创建了一个安全策略,并且在Sales 的表里面使用函数 fn_securitypredicate 作为表的筛选器。传入函数的参数选定为 SalesRep 字段(也就是我们建表的那个销售代表字段了)

CREATE FUNCTION fn_securitypredicate(@SalesRep AS sysname)

RETURNS TABLE

WITH SCHEMABINDING

AS

RETURN SELECT 1 AS fn_securitypredicate_result

WHERE @SalesRep = USER_NAME() OR USER_NAME() = 'Manager';

CREATE SECURITY POLICY SalesFilter

ADD FILTER PREDICATE dbo.fn_securitypredicate(SalesRep)

ON dbo.Sales

WITH (STATE = ON);

然后我们看下查询的结果

EXECUTE AS USER = 'Sales1';

SELECT * FROM Sales;

REVERT;

EXECUTE AS USER = 'Sales2';

SELECT * FROM Sales;

REVERT;

EXECUTE AS USER = 'Manager';

SELECT * FROM Sales;

REVERT;

效果就是这样,当然如果是要设置不同的过滤条件,设置不同的字段的时候,是可以通过上文的函数里面的代码和安全策略进行设置的。按照这个过滤情况,如果登录用户非Sales1 Sales2 Manager 3个其中之一,是什么都查询不了的。

另外,用户无法删除被过滤的数据。比方说 Sales1 不能删除或修改OrderID = 3 的数据。

RLS的出现也是能帮助我们减轻一定功能上面的实现的~

PS:下面看下SQL Server 2016新功能特性

1、PolyBase:更简单高效的管理关系型和非关系型的T-SQL数据;

2、AlwaysOn增强功能:实现高可用和性能次之,包括高达3个同步复制、DTC支持和次级的Round-Robin负载均衡;

3、Row Level Security(层级安全性控管):让客户基于用户特征控制数据访问,功能已内置至数据中,无须再修改应用;

4、Dynamic Data Masking(动态数据屏蔽):有助于保护未被加密的数据;

5、原生JSON支持:实现轻松解析和存储,以及输出关系型数据;

6、Temporal数据库支持:可跟踪历史数据变化;

7、数据历史记录查询,以便DBA可精确定位;

8、MDS增强功:提供主数据服务器的服务器管理能力;

9、增强的Azure混合备份功能:在Azure虚拟机中可实现更快的备份和恢复。

重要改进:

1、始终加密(Always Encrypted)

数据的存储和使用都将采用由微软研究院所开发的技术进行加密;

2、弹性数据库(Stretch Database)

SQL Server用户将能够把数据动态延伸至Microsoft Azure,以便增强其性能;

3、实时业务分析与内存中联机事务处理(Real-time Operational Analytics & In-Memory OLTP)

该分析技术于2014年首次引入,现在已变得更加先进(更高的实时性能);

4、内置高级分析(Built-in Advanced Analytics)、PolyBase和Mobile BI

在SQL Server 2016上,数据分析和PolyBase等技术会更易使用。此外,Mobile BI将被用于移动设备上的图形展示。

以上所述是小编给大家介绍的Sql Server 2016新功能之Row-Level Security(值得关注),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

<think>好的,我现在需要解决用户关于Apache Superset环境变量配置的问题。首先,我得回忆一下Superset的安装和配置流程,尤其是环境变量部分。根据用户提供的引用内容,特别是引用[3],里面提到了几个关键的环境变量,比如SUPERSET_CONFIG_PATH和FLASK_APP。这些变量在配置Superset时非常重要,因为它们指定了配置文件的路径和Flask应用的入口。 用户的问题集中在环境变量的配置说明上,所以我需要详细列出常用的环境变量,并解释每个变量的作用。首先,SUPERSET_CONFIG_PATH是必须的,它告诉Superset在哪里找到配置文件,这在自定义配置时很关键。然后,FLASK_APP设置为superset,这是启动Flask应用的必要步骤。接下来,可能还需要设置数据库连接,比如SUPERSET_DATABASE_URI,用于指定生产环境的数据库,避免使用默认的SQLite。 另外,用户提到的引用[2]中提到了使用conda环境来管理Python版本,这可能涉及到环境变量的设置,比如在激活conda环境时自动设置相关路径。不过用户的主要问题还是Superset本身的环境变量,所以需要聚焦在这里。 还需要考虑安全相关的变量,比如SUPERSET_SECRET_KEY,用于加密敏感信息。这个密钥必须足够复杂,并且不能泄露。此外,配置缓存或Celery任务队列时,可能需要设置REDIS_URL或其他相关变量。 接下来,我需要组织这些信息,确保每个环境变量都有明确的说明和示例。同时,要注意引用用户提供的资料,比如引用[3]中的初始化步骤,其中用到了SUPERSET_CONFIG_PATH和FLASK_APP。此外,用户可能在部署时遇到问题,比如数据库初始化失败,正确设置环境变量可以帮助解决这些问题。 可能还需要提到环境变量的设置方法,比如在Linux系统中可以通过export命令临时设置,或者写入到.bashrc或配置文件中永久生效。例如,引用[2]中的source ~/.bashrc就是让环境变量立即生效的方法。 最后,生成的相关问题应该围绕环境变量的使用场景、配置方法以及常见问题解决,帮助用户进一步理解。比如如何自定义配置路径,或者处理数据库连接问题等。</think>Apache Superset 的环境变量配置主要用于指定运行参数、安全设置及扩展功能。以下是关键环境变量的说明及配置方法: --- ### 1. **核心配置变量** - **`SUPERSET_CONFIG_PATH`** **作用**:指定自定义配置文件路径(默认使用内置配置)。 **示例**: ```bash export SUPERSET_CONFIG_PATH=/opt/superset/superset_config.py ``` [^3] - **`FLASK_APP`** **作用**:声明Flask应用入口(固定为`superset`)。 **示例**: ```bash export FLASK_APP=superset ``` - **`SUPERSET_SECRET_KEY`** **作用**:用于加密会话、令牌等敏感数据。 **要求**:必须设置且长度≥32字符。 **示例**: ```bash export SUPERSET_SECRET_KEY='your_random_secure_key_here' ``` --- ### 2. **数据库连接** - **`SUPERSET_DATABASE_URI`** **作用**:定义生产环境元数据库连接(默认SQLite)。 **示例**(PostgreSQL): ```bash export SUPERSET_DATABASE_URI='postgresql+psycopg2://user:password@localhost/superset_db' ``` [^3] --- ### 3. **缓存与异步任务** - **`REDIS_URL`** **作用**:配置Redis地址以启用缓存或异步任务队列(Celery)。 **示例**: ```bash export REDIS_URL='redis://localhost:6379/0' ``` - **`CACHE_CONFIG`** **作用**:自定义缓存参数(需JSON格式)。 **示例**: ```bash export CACHE_CONFIG='{"CACHE_TYPE":"RedisCache","CACHE_REDIS_URL":"redis://localhost:6379/1"}' ``` --- ### 4. **安全与权限** - **`SUPERSET_FEATURE_FLAGS`** **作用**:启用/禁用功能(如行级权限、跨域访问)。 **示例**: ```bash export SUPERSET_FEATURE_FLAGS='{"ENABLE_ROW_LEVEL_SECURITY": true}' ``` --- ### 5. **部署与日志** - **`SUPERSET_ENV`** **作用**:设置运行环境(如`production`或`development`)。 **示例**: ```bash export SUPERSET_ENV=production ``` - **`SUPERSET_LOG_LEVEL`** **作用**:控制日志详细程度(如`INFO`, `DEBUG`, `WARNING`)。 **示例**: ```bash export SUPERSET_LOG_LEVEL=DEBUG ``` --- ### **配置生效方法** - **临时生效**:直接在终端执行`export`命令。 - **永久生效**:写入`~/.bashrc`或`/etc/profile`,并执行`source ~/.bashrc`[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值