MongoDB小课堂:深度解析认证机制、授权管理与安全加固实战指南

ESP32-S3 SPI接口实战:从引脚分配到高速通信配置 本文详细解析了ESP32-S3的SPI接口配置与高速通信优化技巧,从引脚分配到软件配置,再到DMA传输和时钟优化,帮助开发者快速掌握SPI通信技术。特别针对ESP32-S3的SPI2接口进行了实战演示,包括硬件连接和常见问题排查,适用于各类嵌入式开发项目。 阅读详情

数据库认证

背景:数据库安全的核心挑战

1 )认证与授权的基础定义

  • 认证(Authentication):验证用户身份的过程(解决"你是谁"问题),防止未授权访问
  • 授权(Authorization):定义用户操作权限(解决"你能做什么"问题),限制资源访问范围
  • 风险场景:默认配置下MongoDB以匿名模式运行,允许无凭证访问所有数据库(高危漏洞)

2 )默认配置的安全风险

典型无认证启动命令(Docker环境)
docker run -d --name mongo_container mongo mongod
  • 匿名用户拥有完整操作权限(增删改查/管理命令)
  • 攻击者可直接访问敏感数据(用户信息/业务数据)
  • 审计日志无法追踪操作来源

要点
认证是安全入口,授权是权限核心,二者构成数据库安全的第一道防线。默认配置必须立即加固

构建安全防线


1 ) 管理员用户创建

在admin数据库创建具备全局权限的管理员:

use admin
db.createUser({
  user: "secAdmin",
  pwd: "StrongP@ss!2023",  // 需替换为高强度密码
  roles: [{ 
    role: "userAdminAnyDatabase", 
    db: "admin" 
  }]
})
  • 关键参数说明:
    • userAdminAnyDatabase:管理所有DB用户(不包含数据操作权)
    • 验证数据库(Authentication Database):用户身份标识源(创建后不可更改)

2 ) 启用服务器认证

重启MongoDB进程激活安全机制:

docker run -d --name mongo_secure \
  -p 27017:27017 \
  mongo mongod --auth  # 核心安全参数
  • 认证机制:SCRAM-SHA-256(盐值哈希+迭代加密)
  • 安全影响:未认证连接自动拒绝所有操作

3 ) 客户端认证方法

客户端连接
认证方式
连接时认证
连接后认证
启动参数 -u/-p
db.auth函数

方法1:连接时认证(CLI场景)

mongo -u "secAdmin" -p "StrongP@ss!2023" \
  --authenticationDatabase "admin"

方法2:连接后认证(编程场景)

use admin
db.auth("secAdmin", "StrongP@ss!2023") // 返回1=成功

4 ) RBAC授权模型

用户
角色
权限集合
数据库操作
管理操作
  • 内置角色矩阵:

    角色权限范围适用场景
    readWrite指定DB的CRUD应用服务
    dbAdmin集合/索引管理DBA运维
    clusterAdmin分片/副本集集群管理
    dbOwner库级完全控制技术负责人
  • 权限分配示例:

    // 授予test库读写权限
    use admin
    db.grantRolesToUser("secAdmin", [
      { role: "readWrite", db: "test" }
    ])
    

要点

  • 遵循最小权限原则:用户仅获必需权限,避免使用root等高危角色
案例:安全实践全流程

1 ) 权限验证实战

// 尝试越权访问 
use financial_data
db.transactions.find() 
 
// 错误返回:
// MongoError: not authorized on financial_data to execute command { find: "transactions" }
  • 根因分析:用户缺少目标库的read权限
  • 解决方案:按需分配readWrite或自定义角色

2 ) NestJS集成示例

// app.module.ts (连接配置)
@Module({
  imports: [
    MongooseModule.forRoot('mongodb://secAdmin:StrongP@ss!2023@localhost', {
      authSource: 'admin',  // 验证数据库
      dbName: 'app_db'
    })
  ]
})
 
// auth.service.ts (业务层认证)
async validateUser(username: string, password: string) {
  const conn = await mongoose.createConnection(
    `mongodb://${username}:${password}@localhost/admin?authSource=admin`
  );
  return conn.readyState === 1;  // 连接状态验证
}

3 ) 安全加固策略

网络层防护:

mongod --bind_ip 192.168.1.100 \  # IP白名单
  --tlsMode requireTLS \           # 强制加密传输
  --clusterAuthMode x509           # 证书认证

审计日志配置:

mongod.conf
auditLog:
  destination: file
  path: /var/log/mongodb/audit.log
  format: JSON
  filter: '{ "users": { "$ne": "monitor" } }'  # 排除监控账号

字段级加密:

// 创建加密集合
db.createCollection("patients", {
  encryptedFields: {
    fields: [
      { path: "ssn", keyId: UUID("123e4567-e89b-12d3-a456-426614174000") },
      { path: "medical_history", keyId: UUID("abcde567-1234-12d3-a456-426614174000") }
    ]
  }
})

要点

  • 纵深防御策略:网络隔离→传输加密→权限控制→数据加密→行为审计形成完整安全链条
NestJS集成示例:实现MongoDB认证与授权

在NestJS框架中,通过模块化封装认证逻辑(与原生MongoDB操作分离)

  • 安装依赖:

    npm install @nestjs/mongoose @nestjs/passport passport-local 
    
  • NestJS服务层代码:

    // auth.service.ts
    import { Injectable } from '@nestjs/common';
    import { Model } from 'mongoose';
    import { InjectModel } from '@nestjs/mongoose';
    import { User } from './user.schema';
    
    @Injectable()
    export class AuthService {
      constructor(@InjectModel(User.name) private userModel: Model<User>) {}
    
      async validateUser(username: string, password: string): Promise<any> {
        const user = await this.userModel.findOne({ username });
        // 模拟密码验证(实际使用bcrypt哈希比对)
        if (user && user.password === password) {
          return user; // 认证成功
        }
        return null;   // 认证失败 
      }
    }
    
    // user.schema.ts(Mongoose模型)
    import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
    import { Document } from 'mongoose';
    
    @Schema()
    export class User extends Document {
      @Prop({ required: true })
      username: string;
    
      @Prop({ required: true })
      password: string;
    
      @Prop({ type: Array, default: [] })
      roles: { role: string; db: string }[]; // 角色定义
    }
    export const UserSchema = SchemaFactory.createForClass(User);
    
  • 控制器实现认证端点:

    // auth.controller.ts
    import { Controller, Post, Body } from '@nestjs/common';
    import { AuthService } from './auth.service';
    
    @Controller('auth')
    export class AuthController {
      constructor(private authService: AuthService) {}
    
      @Post('login')
      async login(@Body() credentials: { username: string; password: string }) {
        const user = await this.authService.validateUser(credentials.username, credentials.password);
        if (user) {
          return { status: 'authenticated', roles: user.roles };
        }
        return { status: 'authentication_failed' };
      }
    }
    

补充知识点:

  • 角色权限矩阵:MongoDB内置角色(如readWrite、dbAdmin)可组合使用,最小权限原则推荐自定义角色
  • 连接安全:生产环境应启用TLS加密(--tlsMode requireTLS参数)
  • 审计日志:通过--auditDestination file记录操作,增强可追溯性
结论:安全体系构建指南

1 ) 核心流程总结

Client MongoDB 提供凭据(用户/密码/验证库) 返回会话令牌 请求+令牌 验证权限→返回结果 loop [每次操作] Client MongoDB

2 ) 最佳实践清单

  1. 认证强化
    • 启用SCRAM-SHA-256并定期轮转密码
    • 服务端强制--auth参数
  2. 授权控制
    • 遵循最小权限原则(Role-Based Access Control)
    • 敏感操作限制自定义角色(如denyDropDatabase)
  3. 加密策略
    • TLS传输加密(禁用SSLv3)
    • 字段级加密(FLE)处理PII数据
  4. 审计与监控
    • 记录所有特权操作(用户管理/数据定义)
    • 实时告警异常登录行为
  5. 架构安全
    • 网络隔离(VPC/安全组)
    • 定期漏洞扫描(CVE补丁更新)

3 ) 完整解决方案

网络安全
传输加密
认证机制
授权管理
数据加密
审计追踪
自动告警

要点

  • MongoDB安全需覆盖全生命周期:从初始配置到运行时防护,结合技术手段与管理流程构建企业级防御体系
优化方向

1 ) 密钥管理方案:

  • 推荐使用KMIP或本地密钥文件(--enableEncryption --vaultServerName)

2 ) 灾备策略:

# 加密备份数据
mongodump --uri "mongodb://..." --gzip --out ./backup \
  --query '{ "ssn": { "$exists": true } }' \
  --encryptionKeyFile keyfile.bin

3 ) 漏洞响应流程:

  • 建立CVE监控机制(订阅MongoDB安全通告)
  • 制定补丁更新SOP(测试→灰度→全量)

增强内容:

  • 添加OWASP MongoDB安全清单(包含10项关键检查点)
  • 补充云环境特例(AWS DocumentDB/IaaS安全组配置差异)

数据库授权之内建角色

MongoDB授权机制的核心价值

授权(Authorization)是MongoDB安全体系的基石,与身份认证(Authentication)紧密关联
身份认证验证用户身份,而授权基于身份分配差异化操作权限,确保不同用户只能在指定范围执行特定操作

例如:

  • 管理员拥有全局控制权(如创建用户、停止集群)
  • 普通用户仅限读写特定数据库(如test数据库的查询权限)
    这种机制防止未授权访问,保护敏感数据(如系统集合system.*),是数据库安全配置的核心

简注:

  • 身份认证:验证用户身份(如用户名/密码)
  • 授权:基于身份分配操作权限

授权是将角色赋予用户的过程,单个用户可关联多个角色:

  • 核心逻辑:
    // MongoDB 原生语法:创建用户并分配角色  
    use test  
    db.createUser({  
      user: "test_reader",  
      pwd: "securePass123!",  
      roles: [{ role: "read", db: "test" }] // 赋予 test 库的 read 角色  
    })  
    

要点:授权解决“谁能在哪里做什么”,是数据安全的底层保障

权限、角色与授权机制

1 ) 权限定义 > Resource与Actions的协同

权限通过文档结构定义,明确操作位置(Resource)和操作类型(Actions):

  • resource字段:定义作用域
    { db: "test", collection: "" }  // 作用于test数据库的所有集合(collection为空表示通配符)
    { cluster: true }               // 作用于整个集群(如分片或复制集)
    
  • actions字段:定义操作列表(数组类型)
    ["find", "update"]  // 允许查询和更新文档
    

合并示例:

  • { resource: { db: "test", collection: "" }, actions: ["find", "update"] }
  • 表示:在test数据库的所有集合中,允许查询和更新文档

简注:

  • Resource:权限作用的目标(数据库、集合或集群)
  • Actions:具体操作命令(如find查询、shutdown停止集群)
    • find:查询文档
    • update:更新文档
    • createIndex:创建索引
    • shutdown:停止集群

权限示例总结:

  • { resource: { db: "test", collection: "" }, actions: ["find", "update"] }
    表示在 test 数据库的所有集合中执行查询和更新操作
  • { resource: { cluster: true }, actions: ["shutdown"] }
    表示可停止整个 MongoDB 集群

2 ) 角色定义 > 权限的逻辑封装

角色是权限的集合,用于简化用户管理。MongoDB提供内建角色:

角色类型权限范围关键操作全局角色(anyDatabase)
read当前数据库的非系统集合find, listCollectionsreadAnyDatabase(所有数据库)
readWrite当前数据库的非系统集合insert, delete + readreadWriteAnyDatabase
dbAdmin当前数据库的管理createIndex, 统计存储dbAdminAnyDatabase
userAdmin当前数据库的用户与角色管理创建/删除用户userAdminAnyDatabase

精简版

全局角色权限范围
readAnyDatabase所有数据库的读取权限
readWriteAnyDatabase所有数据库的读写权限
dbAdminAnyDatabase所有数据库的管理权限
userAdminAnyDatabase所有数据库的用户管理

关键限制:

  • 非系统集合:排除system.*集合(存储元数据如用户信息)
  • 全局角色:仅限admin数据库分配(因权限范围过大,需严格控制)
  • 权限继承:readWrite包含read所有操作,但不包含dbAdmin的管理权限

全局角色(Any Database):

  • 角色名后缀为 AnyDatabase(如 readAnyDatabase),权限覆盖所有数据库
  • 关键限制:仅 admin 数据库可分配此类角色(因权限范围过大)
  • 示例: userAdminAnyDatabase:管理所有数据库的用户和角色(如初始管理员账户)

统计结论:

  • 80% 的企业事故源于过度授权(如滥用anyDatabase角色)
  • 趋势:优先使用数据库级角色(如read),仅在必要时启用全局角色

3 ) 授权机制 > 角色分配流程

授权是将角色绑定到用户的过程:

  1. 权限验证流程:
    • 用户通过身份认证 → 系统检查其角色绑定的权限 → 根据resource和actions限制操作
  2. 多角色支持:单个用户可关联多个角色(如同时分配read和dbAdmin)

Mermaid 流程图:

此图可视化授权决策流程,覆盖从登录到操作执行的全链路

要点:权限定义资源位置,角色封装权限,用户通过角色实现安全隔离

实战配置与代码实现

场景 > 创建受限访问用户

需求:创建用户test_reader,仅允许读取test数据库的所有集合。

方案:分配read角色(权限:resource={db:"test", collection:""}, actions=["find"])。

原生MongoDB实现

use test  // 切换到目标数据库
db.createUser({
  user: "test_reader",
  pwd: "securePassword123",  // 密码加密存储
  roles: [
    { role: "read", db: "test" }  // 角色作用域限定于test数据库
  ]
})

NestJS实现(Mongoose模块)

import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { User } from './schemas/user.schema';  // 用户模型定义 
 
@Injectable()
export class UserService {
  constructor(@InjectModel(User.name) private userModel: Model<User>) {}
 
  async createReaderUser(): Promise<void> {
    const db = this.userModel.db;  // 获取数据库实例
    await db.command({
      createUser: 'test_reader',
      pwd: 'securePassword123',
      roles: [{ role: 'read', db: 'test' }],  // 精确分配角色
    });
  }
}

关键差异说明:

  • 原生代码:直接操作数据库,适用于运维场景
  • NestJS代码:通过应用层封装,适合开发集成。保留两者因场景互补

要点:通过角色分配实现最小权限原则,避免过度授权

安全实践与高阶技巧

安全设计原则

  1. 最小权限原则:用户仅获工作所需权限(如避免分配readWriteAnyDatabase给普通用户)
  2. 角色分层管理:
    • 优先使用数据库级角色(如dbAdmin)
    • 全局角色仅限admin数据库分配
  3. 系统集合保护:默认禁止访问system.*集合,防止元数据篡改

授权逻辑总结:

  1. 定义权限:明确 资源范围 + 操作类型
  2. 组合角色:将权限分组为角色(自定义或使用内建角色)
  3. 绑定用户:为用户分配角色(支持跨数据库角色绑定)

数据库授权之自定义角色

自定义角色的必要性

MongoDB权限体系的核心价值在于突破内建角色的局限性:

  • 内建角色缺陷:read/readWrite仅提供库级粗粒度权限,无法满足集合/字段级控制需求(如仅授权accounts集合读取)
  • 合规驱动:GDPR/HIPAA等法规要求数据访问隔离,需最小权限原则(Principle of Least Privilege)
  • 攻击面控制:精确权限范围可避免横向渗透(如通过show collections暴露全量表结构)

MongoDB 权限控制的核心优势在于其角色定制能力:

  1. 超越内建角色限制:当需求超出 read/readWrite 等内建角色范围时
  2. 权限组合机制:支持将原子权限封装为自定义角色
  3. 权限继承体系:支持角色间权限继承(如 readWrite 继承 read 所有权限)

技术简注

  • 最小权限原则:用户仅获取必要权限,降低误操作或恶意攻击风险
  • GDPR:《通用数据保护条例》,要求严格的数据访问隔离
实现集合级精确访问控制

步骤1:创建自定义角色(原生语法)

// 在admin库执行(需userAdmin权限)
use admin;
db.createRole({
  role: "readAccounts",  
  privileges: [{
    resource: { db: "test", collection: "accounts" }, // 作用域:test.accounts集合
    actions: ["find"]  // 仅允许查询操作 
  }],
  roles: [] // 不继承其他角色
});

关键参数解析:

参数类型约束说明作用
rolestring角色唯一标识符-
privileges[].resourcedocument权限作用域(库/集合)定义权限范围:db指定库,collection指定集合(空字符串表示全库)
privileges[].actionsarrayCRUD 操作权限列表操作白名单:find(查询)、insert(插入)、update(更新)等
  • role:自定义角色名称(readAccounts)
  • privileges.resource:指定数据库(test)和集合(accounts)
  • privileges.actions:仅允许 find 操作(数据读取)
  • roles:空数组表示不继承其他角色权限

步骤2:绑定角色至用户

use test;
db.createUser({
  user: "accountsReader",
  pwd: "SecureP@ssw0rd2025",  // 生产环境需长密码+特殊字符 
  roles: ["readAccounts"]  // 关联自定义角色 
  // roles: [{ role: "readAccounts", db: "test" }] 
});

安全实践:

  • 密码策略:长度≥12位,包含大小写字母、数字、符号(如@)
  • 认证库对齐:用户创建库(test)需与角色定义库一致

扩展:

  1. 权限继承扩展案例
// 创建增强型读取角色(继承基础权限)
db.createRole({
  role: "readAccountsExtended",
  privileges: [{
    resource: { db: "test", collection: "accounts" },
    actions: ["find", "createIndex"]  // 增加索引权限 
  }],
  roles: ["readAccounts"]  // 继承基础权限
});
  1. NestJS 实现(TypeScript)
import { InjectModel } from '@nestjs/mongoose';  
import { MongoClient } from 'mongodb';  
 
async createCustomRole() {  
  const client = new MongoClient('mongodb://localhost:27017');  
  await client.connect();  
 
  const db = client.db('test');  
  await db.command({  
    createRole: 'readAccounts',  
    privileges: [{  
      resource: { db: 'test', collection: 'accounts' },  
      actions: ['find']  
    }],  
    roles: []  
  });  
  await client.close();  
}  
案例:权限验证全流程

测试1:正向权限验证(授权操作)

// 连接账户:accountsReader(NestJS示例)
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
 
@Module({
  imports: [
    MongooseModule.forRoot('mongodb://accountsReader:SecureP@ssw0rd2025@localhost/test', {
      authSource: 'test'  // 认证库匹配 
    })
  ]
})
export class DatabaseModule {}

登录验证:

mongo -u accountsReader -p SecureP@ssw0rd2025 --authenticationDatabase test 

授权操作结果:

db.accounts.find({});  // 成功返回accounts集合数据

测试2:反向权限拦截(未授权操作)

测试场景命令示例拦截结果
跨集合访问db.orders.find({})Error: not authorized on test to execute command { find: "orders"... }
写入操作db.accounts.insertOne({...})Unauthorized write operation against test.accounts
元数据探测show collections仅显示accounts集合(其他集合被隐藏)

权限隔离效果对比表

功能管理员用户 (my_user_admin)自定义角色用户 (accountsReader)
查看全量集合列表 (show collections)✅ 显示所有集合⚠️ 仅显示授权集合(accounts)
读取其他集合数据✅ 允许❌ 禁止
写入授权集合✅ 允许❌ 禁止
技术解析:安全机制深度剖析

机制原理说明原生实现参考
权限继承readWrite角色自动包含read权限roles: ["read"]
元数据过滤受限用户执行show collections时自动屏蔽无权限集合系统级访问控制
操作白名单actions参数需显式声明所有允许操作MongoDB操作类型清单
框架集成(NestJS)连接配置中注入权限账户TypeOrmModule认证配置

1 ) 元数据过滤原理

  • 动态屏蔽机制:执行show collections时,MongoDB自动过滤未授权集合(底层调用listCollections命令)。
  • 攻击面控制:避免暴露敏感表名(如user_credentials、payment_records)。

2 ) 权限继承模型

// 创建扩展角色(继承基础权限)
db.createRole({
  role: "readAccountsExtended",
  privileges: [{ 
    resource: { db: "test", collection: "accounts" },
    actions: ["find", "createIndex"]  // 增加索引权限 
  }],
  roles: ["readAccounts"]  // 继承基础查询权限
});

继承优势:

  • 复用权限模板,避免重复配置
  • 支持层级角色体系(如审计员 → 高级审计员)

3 ) 字段级权限扩展($redact聚合)

// 隐藏敏感字段(如balance)
db.accounts.aggregate([
  { $redact: {
    $cond: {
      if: { $eq: [ "$sensitiveField", true ] },
      then: "$$PRUNE",  // 移除字段 
      else: "$$DESCEND"
    }
  }}
]);

适用场景:金融系统中屏蔽余额、医疗记录隐藏诊断详情

生产环境最佳实践

权限设计原则

宽泛
精细
业务需求
权限粒度
内建角色
自定义角色
集合级控制
字段级控制
资源定义
$redact阶段

安全增强策略

  1. 最小权限分配:
    // 反例:过度授权  
    actions: ["find", "insert", "update", "remove"] 
    // 正例:精确授权  
    actions: ["find"]  // 仅开放必要操作 
    
  2. 审计与监控:
    // 查看用户权限详情 
    db.runCommand({
      usersInfo: "accountsReader",
      showPrivileges: true  // 显示权限细节 
    });
     
     // 输出结果包含:
     {
       "privileges": [{
         "resource": { "db": "test", "collection": "accounts" },
         "actions": ["find"]
       }]
     }
    
  3. 框架层权限校验(NestJS示例):
    import { CanActivate, ExecutionContext } from '@nestjs/common';
    
    @Injectable()
    export class CollectionGuard implements CanActivate {
      async canActivate(context: ExecutionContext) {
        const request = context.switchToHttp().getRequest();
        return user.roles.some(role => 
          role.privileges.some(p => 
            p.resource.collection === request.params.collection
          )
        );
      }
    }
    
技术价值与实施收益

  1. 合规性保障:满足GDPR/HIPAA等法规的访问隔离要求。
  2. 安全加固:将攻击面从库级缩小至集合/字段级。
  3. 运维效率:权限变更无需修改应用代码(角色配置即生效)。
  4. 资源优化:避免低权限用户误操作导致数据污染。
  5. 架构灵活性:通过角色继承快速构建复杂权限体系。

扩展建议

  • 结合$redact实现字段级动态脱敏,适用于金融、医疗等高敏场景

要点

模块核心要点
权限设计优先选择集合级自定义角色,避免过度依赖内建角色
安全实践密码长度≥12位+特殊字符,定期执行usersInfo命令审计权限
权限验证必测场景:跨集合访问、元数据探测、写入拦截
生产扩展通过$redact实现字段级控制,结合角色继承构建权限层级
核心技术总结

  1. 权限控制三要素:
  • 资源(resource):数据库、集合级别隔离
  • 操作(actions):find、insert 等命令粒度控制
  • 继承(roles):通过角色继承复用权限(本例未使用)
  1. 最佳实践:
  • 使用 userAdmin 权限账号创建角色/用户
  • 认证数据库(authenticationDatabase)需与角色定义库一致
  1. 自定义角色价值:
  • 突破内建角色的通用性限制,实现业务场景驱动的精细化权限管理,满足合规与安全需求
用App Inventor做个蓝牙温湿度计,手机自动连Arduino,5分钟搞定硬件数据上屏 本文详细介绍了如何使用App Inventor和Arduino快速搭建一个蓝牙温湿度监测系统,实现手机自动连接并显示实时数据。通过图形化编程和硬件组装指南,零代码基础的用户也能在5分钟内完成硬件数据上屏,适用于智能家居、教学演示等多种场景。 阅读详情

相关推荐

STC8G1K08A的10位PWM避坑指南:为什么你的占空比调节总失效?(附寄存器操作时序图)

本文深入剖析了STC8G1K08A单片机10位PWM功能中占空比调节失效的核心原因,揭示了数据手册未明确指出的寄存器操作时序陷阱。通过对比错误与正确配置的波形,文章指出关键在于更新占空比高2位前需临时关闭PWM输出,并提供了经过验证的安全操作宏与函数库,帮助开发者彻底解决此问题,实现0%-100%的平滑控制。

yyy34的博客 752

Mac下MySQL的配置和修改密码以及忘记密码后的重置密码

1 ) Mac下MySQL的配置和修改密码 2 ) 忘记并重置密码 启动MySQL服务,通过 $ps aux | grep mysql 判断是否启动该服务,若未启动,则到 系统偏好设置/MySQL面板 启动服务 软件默认会安装到:/usr/local/mysql 目录,进入这个目录下的bin目录:$cd /usr/local/mysql/bin 执行 $./mysql -u root -p 通过初始密码登录MySQL 通...

Wang的专栏 6259

Shader Graph实战:5分钟搞定Flow Map水体流动效果(含UV偏移避坑指南)

本文详细解析了如何使用Unity的Shader Graph工具快速实现Flow Map水体流动效果,涵盖基础原理、核心节点搭建、高级技巧及性能优化。特别针对UV偏移问题提供避坑指南,帮助开发者轻松打造专业级动态水面效果,适合游戏场景增强视觉表现。

weixin_29250403的博客 246

mysql数据库的一些简单的sql语句 内连接 - 表的关联查询

# 创建一个user表 create table users( id int primary key auto_increment, name varchar(20), dpt_id int ); # 向user表中插入数据 insert into users values (null,'刘备',1), (null,'关羽',2), (null,'赵

Wang的专栏 4264

AI使用指南:6个超实用的Prompt提示词模板

最近越来越多人开始接触AI,但其实想要让AI更懂你,关键是掌握对的提示词模板!今天就给大家分享6种超实用的Prompt提示词模板,不管你是小白还是老手都能用

程序员世杰 8182

【Godot】构建可维护的游戏工程 —— 项目代码组织结构

本文系统梳理了Godot引擎项目组织原则与架构模式,提出场景中心化、命名规范一致性和资源隔离三大核心原则。推荐按功能模块划分目录结构(如scenes/、entities/、systems/),采用snake_case命名避免跨平台问题,并通过.gdignore优化资源管理。文章详细解析了自包含场景设计、信号驱动解耦等架构技巧,以及团队协作中的版本控制策略,强调通过模块化设计平衡一致性与实用性。最终目标构建清晰可维护的项目结构,使资源定位和功能扩展更加高效。(148字)

qq_40205510的博客 1179

数据库、数据库类型、RDBMS以及MySQL

什么是数据库 数据库 就是按一定的结构来组织、存储和管理数据的仓库 可以很方便的进行crud, 能提供多个用户共享、具有尽可能小的冗余度、与应用程序批次独立的数据集合。 其他持久储存缺点:文件操作(不灵活) 数据库类型 包括 : 关系型 和 非关系型 【关系型】 MySQL MariaDB PostgreSQL Microsoft SQL Server Oracle数据库 Sybase 【...

Wang的专栏 4039

TIA博途选型工具Selection Tool的基本使用方法介绍

TIA博途选型工具Selection Tool的基本使用方法介绍

Robot_PLC_HMI_Automation 4215

Eggjs笔记:Eggjs集成ElasticSearch及CRUD操作

相关文档 https://www.elastic.co/guide/index.html https://www.elastic.co/guide/en/elasticsearch/client https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/configuration.html https://www.elastic.co/guide/en/elasticsearch/client/javascrip

Wang的专栏 3530

WorkBuddy最新更新特性(2026-07-21)

WorkBuddy最新更新特性

AI人人懂 582

Diffusion Models扩散模型与深度学习(数学原理和代码解读)

​ 此前GANs霸占各大顶会很多年,DDPM的出现让人耳目一新!经过这两年的发展,Diffusion Models能在图像生成、超分辨率重建、点云生成、语音生成等领域达到SOTA。这篇文章旨在帮助没有了解过的读者入门,《Diffusion Models与深度学习专栏》已经写了将近三十篇文章,既有原理公式和必备基础知识的讲解,也有代码详细实战解读,还有前沿热门应用,欢迎读者订阅。

沉迷单车的追风少年 4万+

Redis: 集群高可用之故障转移和集群迁移

若要检查源和目标是否数据统一,还可选择阿里配套工具RedisFullCheck。3.4 使用 RedisFullCheck 工具检查。下载官方编译好的工具包,直接解压后就能使用。故障转移,包括自动故障转移和手动故障转移。运行之后,就给一个反馈结果,如果是。1.2 原集群与目标集群结构不一致。1.1 原集群与目标集群结构一致。2 ) 手动故障转移。

Wang的专栏 2918

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Python笔记:基于Django框架的数据库设计

概述 需要根据《项目建议书》、《需求说明书》、界面原型、各种标准规范对数据库进行设计, 我们目前先参考这一设计图 结构设计 1 ) 找实体 实体是实体-关系模型的基本对象, 是现实世界中各种事物的抽象。 凡是可以相互区 开并可以被识 的事、物、概念等对象均可认为是实体。 基本的实体列表如下: 会员 类别 商品 订单 订单详情 收货地址 商品评论 商品图片 友情链接 站内公告 … ...

Wang的专栏 2772

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Elastic Stack梳理:集群搭建指南之高可用架构与实战部署

本文介绍了Elasticsearch分布式架构和Cerebro监控工具的部署策略。主要内容包括: ES集群角色划分(主节点、数据节点、协调节点)及功能说明 Cerebro监控工具的独立部署方法和访问方式 集群拓扑规划示例,包含节点IP分配和架构拓扑图 各类型节点的配置原则和数量计算公式 高可用主节点配置要点及示例配置 生产环境优化建议,包括分片规划、硬件配置和安全措施 文章提供了完整的集群部署方案,涵盖从基础概念到具体实施的各个环节,适用于不同规模的ES集群建设。

Wang的专栏 2545

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Redis: 集群环境搭建,集群状态检查,分析主从日志,查看集群信息

当从节点获得足够多的选票时,它就会成为新的主节点,并增加自己的configEpoch来更新槽位配置。在Redis集群中,纪元的更新通常是由节点间的通信和状态变更触发的。例如,当某个节点接收到来自其他节点的状态变更通知时,它会比较通知中的纪元与自己的纪元。如果通知中的纪元更大,则更新自己的纪元。确保集群状态的一致性:通过递增的纪元,集群中的节点可以确保它们对集群状态的认知是一致的。通过递增的纪元版本号,集群中的节点可以确保它们对集群状态的认知是一致的,并解决可能出现的配置冲突问题。4 )纪元的更新机制。

Wang的专栏 2466

MySQL: 数据库性能的决定性因素之从双十一大促高并发场景看系统瓶颈与优化路径

电商大促期间,数据库面临高并发写入、连接数暴增、慢查询积压等核心挑战。本文分析了锁竞争、主从延迟等关键性能瓶颈,并提出多种优化方案:1)使用乐观锁通过版本号控制库存超卖;2)CAS机制实现无锁并发;3)分布式锁协调多节点操作。这些方案在保证数据一致性的同时提升吞吐量,适用于库存扣减、订单创建等典型场景,有效解决数据库扩展难题。

Wang的专栏 2426

Redis: Sentinel哨兵监控架构及环境搭建

在主从模式下,我们通过从节点只读模式提高了系统的并发能力并发不断增加,只需要扩展从节点即可,只要主从服务器之间,网络连接正常主服务器就会将写入自己的数据同步更新给从服务器,从而保证主从服务器的数据相同在这种架构下,它仍然是有一些缺点的,比如说它的可靠性保证不是很好,因为主从模式下,主节点故障了便无法提供写入的服务现在,我们通过哨兵来解决这个问题然后,主节点其实写的压力也是并没有被释放的包括主从之间的数据是相同的,它还有数据冗余一个问题后面集群也会解决这个问题。

Wang的专栏 2181

MongoDB小课堂: 高级查询操作符与游标管理综合指南之深度整合逻辑操作符、字段处理、数组查询与游标控制的最佳实践

MongoDB查询操作符与游标管理摘要 本文整合了MongoDB常用查询操作符和游标管理的关键知识点: 比较操作符: $in和$nin用于多值匹配,注意$nin会包含字段缺失文档 结合$exists可处理字段缺失问题 逻辑操作符: $and可简写为逗号分隔条件 $or可用$in优化等值查询性能 $not和$nor需谨慎处理字段缺失 字段操作符: $exists检查字段存在性 $type支持按BSON类型筛选 数组操作符: $all要求包含所有指定元素 $elemMatch匹配满足条件的数组元素 正则表达式:

Wang的专栏 2145

Redis: 集群测试和集群原理

Redis Cluster 没有单机那种 16个数据库 (0 - 15) 数据库的概念了,就是我们已经看不到数据库了。而是分成了 16384 个 slots (槽位) ,每个节点负责其中一部分槽位,槽位的信息存储于每个节点中。2 ) 16384 个 slots (槽位)那我们客户端这边是怎么来操作集群的呢?1 ) SET/GET 命令。2 ) 开启从节点只读模式。

Wang的专栏 2102

Eggjs笔记:详解Mongoose的聚合管道以及populate实现关联查询

基于mongodb的聚合管道 此处忽略之前mongodb在eggjs中需要配置的步骤,前文已有说明,现在开始在controller中调用(应该封装到service中的,仅作为示例) const result = await this.app.mongo.aggregate('order', { pipeline: [ { $lookup: {...

Wang的专栏 2096

MySQL: 数据库监控核心要素与实施策略

数据库监控是确保系统稳定的关键,涵盖服务可用性、性能、主从复制和资源使用等方面。核心监控包括:通过真实连接和查询验证数据库可用性;跟踪QPS、TPS和并发线程数等性能指标;监控主从复制的链路状态和延迟;以及关注磁盘空间等服务器资源。实现方案包括网络连接验证、读写测试和连接数阈值监控。性能监控需持续记录数据趋势,并采用精准方法检测阻塞事务和复制延迟。全面的数据库监控能有效预防故障,保障系统稳定运行。

Wang的专栏 2095

MySQL: 索引优化策略详解:核心原则、高级应用与维护实践

本文介绍了数据库索引优化的核心策略。第一部分重点讲解高效索引设计原则:禁止在索引列使用表达式或函数;合理使用前缀索引以平衡选择性和存储空间;设计联合索引时应优先考虑高频查询、高选择性和小宽度列;以及利用覆盖索引减少回表查询。第二部分探讨索引的高级应用,特别强调通过合理设计索引优化排序操作。文章指出索引列顺序需与ORDER BY完全一致,并分析了InnoDB与MyISAM存储引擎在排序支持上的差异。通过实际SQL示例展示了索引优化前后的性能差异,为数据库性能调优提供了实用指导。

Wang的专栏 2061

屏幕不止一种:OLED、LCD1602字符屏、TFT/IPS图形屏和串口屏怎么用,这与TTY和PTY又有什么关系

要图像、要曲线、要一块比现在更大的画面,面前的屏就不止一种了。OLED、LCD1602字符屏、TFT/IPS图形屏和串口屏怎么用,又该按什么来挑?这与TTY和PTY又有什么关系?

Lxx_Zw的博客 317

5个陷阱和解决方案:MongoDB源码中自动化测试平台的数

在现代软件工程实践中,自动化测试平台扮演着至关重要的角色,它确保了系统的稳定性和迭代的可靠性。然而,随着业务数据量的快速增长以及并发写入需求的不断上升,基于MongoDB构建的自动化测试平台常常面临性能瓶颈和数据一致性问题。本文将围绕MongoDB源码中一个关键模块——,通过一行一行代码的解读,揭示其设计原理、性能调优点及常见陷阱,适合希望深入理解数据库实现机制的高级工程师。

wuchangjian的专栏 175

用Ai8051帮我写一个FX3UPLC 程序

用Ai8051帮我写一个FX3UPLC 程序AI这个需求我得先跟您确认清楚,因为"用Ai8051U写一个FX3U PLC程序"这个说法本身存在歧义,我不能凭猜测直接给您出一套代码。

czhaii的专栏 303

MongoDB迁移之后,Spring Data 与 Hibernate 的职责分界:一场数据访问层的静默重构

MongoDB迁移后,Spring Data与Hibernate的职责边界被重新划定:一个守护文档弹性,一个锚定关系严谨。这篇文章用对比表格和4类典型场景,帮你看清哪些请求该交给谁,避免“能做”却“不该做”的架构陷阱。😮 如果你正面临混合持久化选型,这篇盘点值得一读。

2601_94912102的博客 271
上一篇: MongoDB小课堂: 分片集群深度解析——片键选择与动态平衡机制全景指南
下一篇: MongoDB小课堂:精通数据迁移工具 mongoexport 与 mongoimport 的终极指南
Wang's Blog
博客等级 码龄12年 7438粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值