Trino安装使用及权限控制

这篇具有很好参考价值的文章主要介绍了Trino安装使用及权限控制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

https://blog.csdn.net/shy_snow/article/details/130523338

Trino安装部署及使用

Trino是一个分布式SQL查询引擎,旨在查询分布在一个或多个异构数据源上的大型数据集。支持丰富的数据源连接方式,支持库、表和字段级别的权限控制,以及支持通过资源组实现类似队列的资源使用控制。这些都需要手工进行配置,这是不方便的地方。

一、Trino部署

官网:https://trino.io

环境依赖:

​ Java 17.0.3版本

​ Python 2.6.x, 2.7.x, or 3.x

1. 下载

wget https://repo1.maven.org/maven2/io/trino/trino-server/412/trino-server-412.tar.gz
https://download.csdn.net/download/shy_snow/87675932

2. 解压

将压缩包解压至trino-server-412,我们称之为安装目录

tar -xzvf trino-server-412.tar.gz

3. 配置

在安装目录中中创建etc目录,在目录中创建以下配置文件:

node.properties:特定于每个节点的环境配置。
jvm.config:Java 虚拟机的命令行选项。
config.properties: Trino 服务器的配置。
log.properties:日志属性。
catalogs下的properties:数据源的配置。

1.节点属性

node.properties是节点属性文件,基本配置如下

node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/var/trino/data

node.environment:环境名称。集群中所有的trino节点环境名称必须相同

node.id:trino的唯一标识符,每个节点的node.id必须是唯一的

node.data-dir:数据目录的位置。存储日志和其他数据

2.JVM配置

JVM 配置文件etc/jvm.config包含用于启动 Java 虚拟机的命令行选项列表。基本配置如下

-server
-Xmx8G
-XX:InitialRAMPercentage=80
-XX:MaxRAMPercentage=80
-XX:G1HeapRegionSize=32M
-XX:+ExplicitGCInvokesConcurrent
-XX:+ExitOnOutOfMemoryError
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-XX:ReservedCodeCacheSize=512M
-XX:PerMethodRecompilationCutoff=10000
-XX:PerBytecodeRecompilationCutoff=10000
-Djdk.attach.allowAttachSelf=true
-Djdk.nio.maxCachedBufferSize=2000000
-XX:+UnlockDiagnosticVMOptions
-XX:+UseAESCTRIntrinsics
# Disable Preventive GC for performance reasons (JDK-8293861)
-XX:-G1UsePreventiveGC

3.配置属性文件etc/config.properties
配置属性文件etc/config.properties包含 Trino 服务器的配置。每台 Trino 服务器都可以充当协调器和工作器,但是专用一台机器只执行协调工作可以在更大的集群上提供最佳性能。
Trino安装使用及权限控制
coordinator的基本配置如下。

#单机的node-scheduler.include-coordinator设为true
node-scheduler.include-coordinator=true
#Trino uses HTTP for all communication, internal and external.
http-server.http.port=8080
#注册和心跳地址uri,后面的8080和http-server.http.port保持一致
discovery.uri=http://192.168.129.135:8080

worker的基本配置如下

coordinator=false
http-server.http.port=8080
discovery.uri=http://192.168.129.135:8080

4.日志级别

日志级别文件etc/log.properties,基本信息如下

io.trino=INFO

5.Catalog属性

Trino访问数据通过connector,它配置在catalog目录内,我们创建etc/catalog目录,

mysql源配置如下,我们在catalog目录下创建mysql.properties

connector.name=mysql
connection-url=jdbc:mysql://192.168.129.102:3306?useSSL=false
connection-user=root
connection-password=123456
  1. 配置jdk

机器是使用的jdk8,我们不做升级。修改启动脚本/trino-server-412/bin/launcher使其使用jdk17

JAVA_HOME17=/usr/java/jdk-17.0.6
PATH=$JAVA_HOME17/bin:$JAVA_HOME17/jre/bin:$PATH
exec "$(dirname "$0")/launcher.py" "$@"

4. 服务端启动

./trino-server-412/bin/launcher start

tail -f /data/trino/data/var/log/server.log

1.web访问地址

http://192.168.129.135:8080

Trino安装使用及权限控制

5. 客户端

1.下载

下载之后将trino-cli-412-executable.jar改成trino-cli,并给trino-cli添加可执行权限

wget https://repo1.maven.org/maven2/io/trino/trino-cli/400/trino-cli-412-executable.jar

2.客户端启动

mv trino-cli-412-executable.jar trino-cli

chmod +x trino-cli

./trino-cli --server localhost:8080

6. dbeaver连接

Trino安装使用及权限控制

7. jdbc连接

import java.sql.*;
public class TrinoJdbc
{
    public static void main(String[] args)
    {
        String url = "jdbc:trino://192.168.129.135:8080/hive/public_train?user=root&password=&SSL=false";
        Connection connection = null;
        ResultSet rs = null;
        try
        {
            connection = DriverManager.getConnection(url);
            Statement statement = connection.createStatement();
            rs = statement.executeQuery("select * from test limit 10");
            if (rs != null)
            {
                while (rs.next())
                {
                    System.out.println(rs.getString("id") + "," + rs.getString("name"));
                }
            }
            
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        finally
        {
            if (connection != null)
            {
                try
                {
                    connection.close();
                }
                catch (SQLException e)
                {
                    e.printStackTrace();
                }
            }
        }
    }
    
}

pom.xml增加trino的jdbc驱动

        <dependency>
            <groupId>io.trino</groupId>
            <artifactId>trino-jdbc</artifactId>
            <version>412</version>
        </dependency>

二、连接配置和使用

Trino支持的连接 https://trino.io/docs/current/connector.html

Accumulo
Atop
BigQuery
Black Hole
Cassandra
ClickHouse
Delta Lake
Druid
Elasticsearch
Google Sheets
Hive
Hudi
Iceberg
Ignite
JMX
Kafka
Kinesis
Kudu
Local File
MariaDB
Memory
MongoDB
MySQL
Oracle
Phoenix
Pinot
PostgreSQL
Prometheus
Redis
Redshift
SingleStore
SQL Server
System
Thrift
TPCDS
TPCH

1. 集成mysql

1.配置参考上面的3.5Catalog属性,在catalog目录下创建mysql.properties后重启trino

#connector.name是
connector.name=mysql
connection-url=jdbc:mysql://192.168.129.102:3306?useSSL=false
connection-user=root
connection-password=123456

2.查询

//如果查询失败显示没有查询权限,那trino目录权限就需要改成有hive查询权限的账号。然后重启 select * from catalog.schema.table

3.常用命令

显示所有的catalog (catalog目录下的properties文件名)

show catalogs;

查看mysql下所有的schemas (对应为数据库)

show schemas from mysql

查看表

show tables from mysql.cdc;

查询表数据

use mysql.cdc;

select * from mysql.cdc.lineitem limit 10;

退出客户端 quit;

2. 集成hive(有kerberos认证)

hive源配置如下,我们在catalog目录下创建文件hive.properties。如果要配置多个hive,使用不同的properties文件名即可,比如hive-108.properties,hive-root.properties。catalog就是hive.properties的文件名。

core-site.xml, hdfs-site.xml可以从hadoop集群复制一份然后放到配置文件中。

connector.name=hive
hive.metastore.uri=thrift://cdh129130:9083
hive.config.resources=/etc/hive/conf/core-site.xml,/etc/hive/conf/hdfs-site.xml

# 访问hive metastore的Kerberos信息
hive.metastore.authentication.type=KERBEROS
hive.metastore.service.principal=hive/cdh129130@MYCDH
hive.metastore.client.principal=hive/cdh129130@MYCDH
hive.metastore.client.keytab=/root/hive.keytab

#访问HDFS的Kerberos信息
hive.hdfs.authentication.type=KERBEROS
hive.hdfs.presto.principal=hive/cdh129130@MYCDH
hive.hdfs.presto.keytab=/root/hive.keytab

修改jvm.properties

添加如下属性:

-Dsun.security.krb5.debug = true
-Dlog.enable-console = true
-Djava.security.krb5.conf=/etc/krb5.conf

修改/etc/krb5.conf

在 /etc/krb5.conf 文件的 libdefaults 部分中添加如下属性:

allow_weak_crypto = true

重启Trion

/data/trino/trino-server-412/bin/launcher restart 

使用hive连接

/data/trino/trino-cli --server 192.168.129.135:8080 
trino> show catalogs;
trino> show schemas from hive;
trino> select * from hive.public_train.test;
-- 建表
CREATE TABLE hive.public_train.page_views (
  view_time timestamp,
  user_id bigint,
  page_url varchar,
  ds date,
  country varchar
)
WITH (
  format = 'ORC',
  partitioned_by = ARRAY['ds', 'country'],
  bucketed_by = ARRAY['user_id'],
  bucket_count = 50
)

3. 集成hudi

支持Hudi version 0.12.2 or higher. 必须要能访问HMS,metastore的配置和hive相同。

在catalog目录下创建文件hudi.properties。

connector.name=hudi
hive.metastore.uri=thrift://cdh129130:9083

hive.config.resources=/etc/hive/conf/core-site.xml,/etc/hive/conf/hdfs-site.xml
# 访问hive metastore配置
hive.metastore.authentication.type=KERBEROS
hive.metastore.service.principal=hive/cdh129130@MYCDH
hive.metastore.client.principal=hive/cdh129130@MYCDH
hive.metastore.client.keytab=/root/hive.keytab

#配置Presto访问HDFS的Kerberos信息,该段配置可以只存在Presto的Worker节点
hive.hdfs.authentication.type=KERBEROS
hive.hdfs.presto.principal=hive/cdh129130@MYCDH
hive.hdfs.presto.keytab=/root/hive.keytab
show schemas from hudi;
use hudi.hudi_db;
show tables from hudi.hudi_db;
select * from hudi.hudi_db.hudi_mor_tbl;

4. 集成Kafka

官网文档: https://trino.io/docs/current/connector/kafka.html

在etc/catalog目录下创建文件kafka.properties

connector.name=kafka
kafka.nodes=192.168.128.130:9092
#kafka的topic,需要手工配置才能在trino中可见
kafka.table-names=test,test2
#配置table的消息类型和字段信息等的文件目录,默认是etc/kafka
kafka.table-description-dir=/data/trino/trino-server-412/etc/kafka

在etc/kafka下配置表信息的json文件,以test为例

vi test.json

{
  "tableName": "test",
  "schemaName": "default",
  "topicName": "test",
  "message": {
    "dataFormat": "csv",
    "fields": [
      {
        "name": "id",
        "type": "VARCHAR",
        "mapping": "0"
      },
      {
        "name": "names",
        "type": "VARCHAR",
        "mapping": "1"
      },
      {
        "name": "addr",
        "type": "VARCHAR",
        "mapping": "2"
      }
    ]
  }
}

在kafka里向topic(test)发送三条数据用于查询测试

Trino安装使用及权限控制

查询kafka.default.test

 /data/trino/trino-cli --server 192.168.129.135:8080 
trino> select * from kafka.default.test;

Trino安装使用及权限控制

三、Rules规则配置进行库表权限控制

1. 系统级访问控制文件

vi etc/access-control.properties

# default,allow-all,read-only,file
access-control.name=file
# 规则json本地文件
security.config-file=etc/rules.json
# etc/rules.json文件的自动的refresh的周期
security.refresh-period=1s
System access control name 说明
default 默认值.除了用户模拟(user impersonation)之外,所有操作都是允许的。
allow-all 所有操作都是允许的。
read-only 只读。允许读数据和元数据, 但是不允许写.
file 授权规则是在配置文件中指定的, 参考 File-based access control.

​ 除了通过配置系统级别的访问控制,access-control.name=file时,可以在rules.json配置文件中分别配置catalog, schema, 和table级别的rules规则配置。catalog rules对整个catalog访问进行控制。table表和schema模式规则用于指定谁可以为模式和表创建、删除、更改、选择、插入、删除等。对于每个规则集,权限基于从上到下读取的第一个匹配规则。如果没有匹配的规则,则拒绝访问。如果根本没有提供任何规则,则授予访问权限。

下面是access-control.name=file时etc/rules.json的catalog, schema, 和table级别的rules规则配置说明。

2. catalog规则配置

每个catalog规则都由以下属性组成:
user(可选):正则表达式以与用户名匹配。默认值为.*。
role(可选):用于与角色名称匹配的正则表达式。默认值为.*。
group(可选):用于与组名称匹配的正则表达式。默认值为.*。
catalog(可选):与目录名称匹配的正则表达式。默认值为.*。
allow(必需):指示用户是否有权访问目录的字符串。此值可以是all、 read-only或none,并且默认为none。

vi etc/rules.json

{
  "catalogs": [
    {
      "role": "admin",
      "catalog": ".*",
      "allow": "all"
    },
    {
      "group": "hive",
      "catalog": "(hive|hive135)",
      "allow": "all"
    },
    {
      "user": "root",
      "catalog": "(mysql|hive|system)",
      "allow": true
    },
    {
      "user": "guest",
      "catalog": "mysql",
      "allow": "read-only"
    },
    {
      "catalog": "system",
      "allow": "none"
    }
  ]
}

3. schema规则配置

每个schema规则都由以下字段组成:
user(可选):正则表达式以与用户名匹配。默认值为.*。
role(可选):用于与role名称匹配的正则表达式。默认值为.*。
group(可选):用于与group名称匹配的正则表达式。默认值为.*。
catalog(可选):与catalog名称匹配的正则表达式。默认值为.*。
schema(可选):与schema名称匹配的正则表达式。默认值为.*。
owner(必需):布尔值,指示用户是否被视为schema的所有者。默认为false。
{
  "schemas": [
    {
      "role": "admin",
      "schema": ".*",
      "owner": true
    },
    {
      "user": "guest",
      "owner": false
    },
    {
      "catalog": "default",
      "schema": "default",
      "owner": true
    }
  ]
}

4. table规则配置

这些规则管理授予特定表的权限。
user(可选):正则表达式以与用户名匹配。
group(可选):正则表达式,用于与用户所属的每个用户组进行匹配。
schema(可选):与模式名称匹配的正则表达式。
table(可选):与表名称匹配的正则表达式。
privileges(必需):SELECT、INSERT、DELETE、UPDATE、OWNERSHIP、GRANT_SELECT中的零个或多个。
columns(可选):列约束列表。
filter(可选):表的布尔筛选器表达式。
filter_environment(可选):筛选器评估过程中使用的环境。

{

  "schemas": [
    {
      "role": "admin",
      "schema": ".*",
      "owner": true
    },
    {
      "group": "finance|human_resources",
      "schema": "hr",
      "owner": true
    },
    {
      "user": "guest",
      "schema": "guest*",
      "owner": true
    },
    {
      "catalog": "mysql",
      "schema": "default",
      "owner": true
    }
  ],

  "tables": [
    {
      "group": "admin",
      "privileges": ["SELECT", "INSERT", "DELETE", "UPDATE", "OWNERSHIP"]
    },
    {
      "user": "banned_user",
      "privileges": []
    },
    {
      "catalog": "mysql",
      "schema": "hr",
      "table": "employee",
      "privileges": ["SELECT", "INSERT", "DELETE"],
      "filter": "user = current_user",
      "filter_environment": {
        "user": "system_user"
      }
    },
    {
      "catalog": "mysql",
      "schema": "hr",
      "table": ".*",
      "privileges": ["SELECT"],
      "columns" : [
         {
            "name": "address",
            "allow": false
         },
         {
            "name": "ssn",
            "mask": "substring(credit_card, -4)",
            "mask_environment": {
              "user": "system_user"
            }
         }
      ]
    }
  ]
}

表级别访问控制

没有任何权限的用户无法访问表

记录级别过滤

根据不同用户过滤查询结果"filter": “user = current_user”

/data/trino/trino-cli --server 192.168.129.135:8080  --user admin
trino> select * from mysql.hr.employee;
 id | user  | address | credit_card  |  ssn  
----+-------+---------+--------------+-------
  3 | admin | addr    | 1234-56-7893 | 33333 
(1 row)
 
 /data/trino/trino-cli --server 192.168.129.135:8080  --user human_resources
trino> select * from mysql.hr.employee;
 id |      user       | address | credit_card  |  ssn  
----+-----------------+---------+--------------+-------
  2 | human_resources | addr    | 1234-56-7892 | 22222 
(1 row)

字段级别限制

对非属主不允许查询address 敏感字段 “columns” : [ { “name”: “address”, “allow”: false }]

并对ssn字段进行处理这里是截取后四位 “mask”: " substring(credit_card, -4) "

5. 用户组userGroup规则配置

https://trino.io/docs/current/security/group-file.html

vi etc/group-provider.properties

group-provider.name=file
# 用户组配置文件
file.group-file=/data/trino/trino-server-412/etc/group.txt
file.refresh-period=5s

vi etc/group.txt

用户组文件包含组和成员的列表,每行一个,用冒号分隔。用户之间用逗号分隔。group.txt文件修改后,默认5s自动更新。

group_name:user_1,user_2,user_3
hive:test,zxc
admin:root,admin
guest:guest
human_resources:human_resources

6. 可见性说明

要使catalog、schema或table在SHOW命令中可见,用户必须至少对该项或任何嵌套项具有一个权限。嵌套项不需要已经存在,因为任何潜在的权限都会使该项可见。具体的:
catalog:如果用户是任何嵌套schema的所有者,拥有任何嵌套表或表函数的权限,或者拥有在catalog中设置会话属性的权限,则可见。
schema:如果用户是架构的所有者,或者对任何嵌套表或表函数具有权限,则可见。
table:如果用户对该表具有任何权限,则可见。

四、Resource groups资源组进行资源隔离限制

Trino Resource groups配置中有两个核心概念:

​ 一是 资源组,可以类比于 Hadoop Yarn 的队列,每个资源组中定义了最大并发、调度权重等参数,每个资源组还可以配置子资源组;

Trino Resource groups资源组用于在提交查询任务时对资源使用情况进行限制,可以对提交的查询强制执行队列排队策略,也可以在子组之间分配资源。trino查询会被分配到某个资源组,并消耗该组(及其父资源组)的资源。当资源组用完资源时,新的查询进入队列等待。

name(必需):组的名称。可能是一个模板(见下文)。
maxQueued(必需):排队查询的最大数量。一旦达到此限制,将拒绝新的查询。
softConcurrencyLimit(可选):并发运行的查询数,在此之后,只有当所有低于其软限制的对等资源组都不合格或所有符合条件的对等资源都高于软限制时,才会运行新的查询。
hardConcurrencyLimit(必需):正在运行的查询的最大数量。
softMemoryLimit(必需):在新查询进入队列之前,此组可以使用的最大分布式内存量。可以指定为绝对值(即1GB)或集群内存的百分比(即10%)。
softCpuLimit(可选):在对最大运行查询数进行惩罚之前,该组在一段时间内可能使用的最大CPU时间量(请参阅cpuQuotaPeriod)。还必须指定hardCpuLimit。
hardCpuLimit(可选):该组在一段时间内可能使用的最大CPU时间。
schedulingPolicy(可选):指定如何选择排队的查询来运行,以及子组如何有资格启动其查询。可以是以下三个值之一:
	fair(默认):排队的查询是先入先出处理的,子组必须轮流启动新的查询(如果有排队的话)。
	weighted_fair:根据子组的调度权重和它们已经同时运行的查询数来选择子组。子组运行查询的预期份额是基于所有当前符合条件的子组的权重计算的。选择相对于其共享具有最小并发性的子组来启动下一个查询。
	query_priority:所有子组也必须配置query_priorty。排队查询严格按照优先级进行选择。
schedulingWeight(可选):权重和weighted_fair调度策略中使用的该子组的权重。默认值为1。请参见调度权重示例。
jmxExport(可选):如果为true,则将组统计信息导出到JMX进行监控。默认为false。
子组(可选):子组列表。

​ 二是 选择器,选择器用来映射用户与资源组的关系,符合条件的用户才可以提交 sql 至某个资源组。

Resource groups资源组的配置有两种配置方式: 一种是基于 file 静态文件配置,一种是基于动态 db 的方式

1. file文件方式配置Resource groups资源组

配置etc/resource-groups.properties

有file文件方式还是db数据库方式配置两种配置方式

# 指定file文件方式还是db数据库方式配置
resource-groups.configuration-manager=file
# JSON configuration file
resource-groups.config-file=etc/resource-groups.json

在etc/resource-groups.json中配置资源组及资源限制,以及选择器

{
  "rootGroups": [
    {
      "name": "default",
      "softMemoryLimit": "60%",
      "hardConcurrencyLimit": 5000,
      "schedulingWeight": 60,
      "maxQueued": 5000,
      "schedulingPolicy": "fair",
      "jmxExport": false
    },
    {
      "name": "queueJdbc",
      "softMemoryLimit": "40%",
      "schedulingWeight": 40,
      "hardConcurrencyLimit": 5000,
      "maxQueued": 5000,
      "schedulingPolicy": "fair",
      "jmxExport": false
    },
    {
      "name": "queueCli",
      "softMemoryLimit": "40%",
      "schedulingWeight": 40,
      "hardConcurrencyLimit": 5000,
      "maxQueued": 5000,
      "schedulingPolicy": "fair",
      "jmxExport": false
    }
  ],
  "selectors": [
    {
      "userGroup": "hive",
      "group": "queueJdbc"
    },
    {
      "userGroup": "human_resources",
      "group": "queueCli"
    },
    {
      "source": ".*cli*",
      "clientTags": ["queueCli"],
      "group": "queueCli"
    },
    {
      "source": ".*jdbc*",
      "clientTags": ["queueJdbc"],
      "group": "queueJdbc"
    },
    {
      "group": "default"
    }
  ],
  "cpuQuotaPeriod": "1h"
}

根据用户匹配不同的用户组(租户),分配不同的队列执行查询

“selectors”: [
{
“userGroup”: “hive”,
“group”: “queueJdbc”
},
{
“userGroup”: “human_resources”,
“group”: “queueCli”
}]

#使用human_resources组的human_resources用户
/data/trino/trino-cli --server 192.168.129.135:8080 --user human_resources
trino> use hive.public_train;
trino:public_train> select current_user,current_groups(),current_catalog,current_schema;
trino:public_train> select * from test limit 1;

#使用hive组的test用户
/data/trino/trino-cli --server 192.168.129.135:8080 --user test
trino> use hive.public_train;
trino:public_train> select current_user,current_groups(),current_catalog,current_schema;
trino:public_train> select * from test limit 1;

Trino安装使用及权限控制

使用client-tags区分不同的客户端并匹配不同的队列

[test@cdh129135 trino-server-412]$ /data/trino/trino-cli --server 192.168.129.135:8080 --client-tags=queueCli --user test 
trino> select * from mysql.cdc.zxc_t1

import java.sql.*;
public class TrinoJdbc
{
    
    public static void main(String[] args)
    {
        // URL parameters
        String url = "jdbc:trino://192.168.129.135:8080/hive/public_train?user=root&password=&SSL=false&clientTags=queueJdbc&source=jdbc";  // &clientTags=queueJdbc&source=jdbc
        Connection connection = null;
        try
        {
            connection = DriverManager.getConnection(url);
            Statement statement = connection.createStatement();
            ResultSet rs = null;
            rs = statement.executeQuery("select * from test limit 10");
            if (rs != null)
            {
                while (rs.next())
                {
                    System.out.println(rs.getString(1) + "," + rs.getString(2));
                }
            }
            
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        finally
        {
            if (connection != null)
            {
                try
                {
                    connection.close();
                }
                catch (SQLException e)
                {
                    e.printStackTrace();
                }
            }
        }
    }
    
}

2. 数据库方式配置Resource groups资源组

db数据库方式配置etc/resource-groups.properties

resource-groups.configuration-manager=db
resource-groups.config-db-url=jdbc:mysql://192.168.129.102:3306/resource_groups
resource-groups.config-db-user=root
resource-groups.config-db-password=123456

数据库类型支持MySQL, PostgreSQL, Oracle。

重启trino会自动创建表

选择器表中的规则按照优先级字段中值的降序进行处理。
resource_groups表还包含一个environment字段,该字段与node properties中node.environment属性中包含的值相匹配。这允许在需要时将不同Trino集群的资源组配置存储在同一数据库中。
配置每秒从数据库中重新加载一次,更改会自动反映到传入的查询中。文章来源地址https://www.toymoban.com/news/detail-435189.html

参考: https://trino.io/docs/412/

到了这里,关于Trino安装使用及权限控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • trino的介绍和安装使用

    最近在研究大数据的一些组件和数据库,本来是要调研下presto怎么用的,结果发现presto因为facebook的关系,导致presto核心开发成员离开, 重新开始创建了trino,个人感觉trino发展会更好,因为他们也是为了创建一个完全开源的环境才离开facebook,没有那么多商业上的私心,会更

    2023年04月27日
    浏览(32)
  • MYSQL完全卸载、安装与账号创建、权限控制

    CentOS 卸载 MySQL 使用以下命令查看当前安装mysql情况,查找以前是否装有mysql 这里显示我安装的 MySQL 服务有有: 删除命令:rpm -e –nodeps 包名 使用上面命令报依赖错误,使用下面命令 如果提示错误:error: %preun(xxxxxx) scriptlet failed, exit status 1,使用下面命令 查找之前老版本my

    2024年02月12日
    浏览(40)
  • shiro权限控制原理及权限分隔符使用

    通常这两个抽象方法需要我们自己去实现,也就是自定义Realm类,如: 具体的实现方法网上有很多,这里就不贴代码了。重点介绍一下doGetAuthorizationInfo,该方法主要干的就一件事,就是把当前用户的角色和权限信息添加进AuthorizationInfo实例中,以便后续鉴权时使用。如下示例

    2024年02月11日
    浏览(49)
  • 为什么要给数据库加索引?转自 https: //blog.tankery.me/development/why-we-need-indexes-for-database

    这篇文章不是数据库索引的使用文档,不会给每个功能的使用都做介绍,而是通过我自己的案例,对案例中遇到的几个点做详细的说明。如果想查看具体的使用帮助,可以参考官网的文档:Query Planning “老谭,测试发现睡眠历史记录页面的打开速度太慢了,你给快速解决一下

    2024年02月03日
    浏览(37)
  • Docker安装开源Blog(Typecho)

    首先这个镜像是centos7.9进行安装PHP环境,然后挂载目录去运行的,镜像大概300MB左右,没学过PHP,没办法给Dockerfile文件 参考文章: Docker安装Typecho | D-y Blog 感知不强,图一乐 https://www.wlul.top/article/28276769-1f97-431e-8059-e6723d5c7689 参考模板: 一款拥有漂亮外表的Typecho简洁主题-Sc

    2024年01月22日
    浏览(49)
  • 在.NET 6.0上使用Kestrel配置和自定义HTTPS

    引用地址:在.NET 6.0上使用Kestrel配置和自定义HTTPS_kestrel 使用https_云策数据的博客-CSDN博客 在ASP.NET Core中,默认情况下HTTPS处于打开状态,这个不是问题,我们无需禁用它。因为如果你的服务是在防火墙后面,是属于后台服务,不对外网提供服务,启用HTTPS也是有意义的。 通常

    2024年02月16日
    浏览(41)
  • 使用git命令或在idea下https方式克隆代码报权限问题需删除git账号密码

    win10操作系统,使用git命令或在idea下check out项目代码,报权限认证失败问题。 使用git进行代码管理,曾使用git命令或在idea下使用https项目地址进行check out,都是正常的。这次新项目使用大禹进行代码管理,项目权限已正常赋予。但clone项目报认证失败问题,在git bash中也查看

    2024年02月03日
    浏览(44)
  • .NET使用依赖注入,控制反转

    .NET 支持依赖项注入 (DI) 软件设计模式,这是一种在类及其依赖项之间实现 控制 (IoC) 的反转 的技术 避免有状态的、静态类和成员。 通过将应用设计为改用单一实例服务,避免创建全局状态。 避免在服务中直接实例化依赖类。 直接实例化会将代码耦合到特定实现。 不在服务

    2023年04月16日
    浏览(45)
  • DRF ~ day11 之 基于角色的访问控制、django的权限演示、权限控制、simple-ui的使用、django-vue-admin演示

    概念 RBAC 是基于角色的访问控制(Role-Based Access Control )在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管

    2024年01月19日
    浏览(37)
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我们使用的是GraphQL, 虽然GraphQL的使用处于上升趋势,但是Rest API还是使用的更广泛一些. 所以还是决定回到传统的rest api framework上来, Django rest framework的官网上给了一个很好用的QuickStart, 我参考Quick Start将前面的Blog的例子用DRF(Django Rest Framework)重新构筑一遍

    2023年04月19日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包