小简博客 - 后端
type: channel
link: https://blog.ixor.me/tag/%E5%90%8E%E7%AB%AF/
items: 闯进 Kubernetes 的世界
items: 数据库字段级权限控制方案设计
items: 单点登录与授权登录业务指南

闯进 Kubernetes 的世界
type: item
date: 2025-06-06T10:04:00+00:00
description: 第一章：Kubernetes (K8s) 入门：容器化应用的智能管理系统你正在构建一个应用程序，它最终会服务成千上万的用户。当你的应用程序只是一个简单的“程序包”时，你可能可以手动管理它。但当这个“程序包”需要运行几十、几百甚至几千份，并且要保证它们随时在线、协同工作时，手动管理就变得不可能。这时候，你会想创建一个系统，它能像一个智能机器人一样，自动帮你管理这些应用程序副本。让我们回到 K8s 诞生的地方——Google。1.1 K8s 的前世今生：Google 的解决方案在 K8s 出现之前，也就是本世纪初的 Google，一群顶尖的工程师也面临着同样的问题，只不过规模要大得多：他们有数以万计的应用程序和数十万台服务器。手动部署、管理、扩缩这些应用程序简直是天文数字般的挑战。于是，Google 内部诞生了一个名为 Borg 的系统。Borg 是一个高度自动化的集群管理系统，它能高效地在 Google 的服务器集群上调度和运行应用程序。Borg 的成功，使得 Google 能够以惊人的效率和规模运行其各项服务，从搜索到 Gmail，无一不是受益于其强大的自动化能力。随着时间的推移，容器技术开始普及。Google 意识到，Borg 的核心理念和实践可以被抽象出来，并推广给更广泛的开发者社区。于是，他们借鉴 Borg 的经验，重新设计并开源了一个全新的项目——这就是 Kubernetes (K8s)。K8s 就像是 Borg 的“开源精华版”，将 Google 内部大规模系统管理的宝贵经验带给了全世界。1.2 K8s 的核心价值：为什么我们需要它？当你的应用程序需要在大规模分布式环境中稳定运行，并具备高可用性、弹性伸缩能力时，手动运维会迅速变得复杂且不可靠。K8s 的存在，正是为了解决这些痛点，它提供了一套完整的解决方案，让你的应用程序能够“活下来、跑得好”：自动化运维： K8s 能够自动化处理应用程序的部署、更新、扩缩容、故障恢复等几乎所有运维任务。你无需手动干预，只需定义应用程序的期望状态，K8s 就会自动使其达到并维持该状态。这极大地减少了人工错误和运维负担。高可用性与自愈： K8s 持续监控应用程序和其运行环境的健康状况。一旦发现故障（如某个应用程序实例崩溃、某个服务器宕机），它会自动进行故障转移、重启受损实例或重新调度，确保服务不中断，实现系统的高可用性。弹性伸缩： 随着业务负载的变化，K8s 能够根据预设规则自动增加或减少应用程序的运行实例数量。这意味着你的应用程序可以根据实际需求动态调整资源，高峰期应对自如，低谷期节约成本。资源高效利用： K8s 能够智能地将应用程序调度到集群中资源最适合的服务器上，优化资源分配。它就像一个精明的“调度员”，确保每台服务器的计算资源都得到充分利用。简而言之，K8s 的核心用处在于将复杂的、手动的、易出错的分布式应用管理过程，转变为自动化、可靠且高效的模式。它让开发者和运维人员能够专注于应用程序本身，而不是底层的基础设施管理。1.3 K8s 与 Docker Compose 有何不同？：适用场景的差异那么，有人就问了：既然 Docker Compose 也能管理多个容器，那 K8s 又有何不同？关键在于它们设计的规模和场景：Docker Compose 更适用于在单台机器上管理和运行少量相互关联的容器。它像一个“小团队的指挥官”，适合本地开发和测试环境。Kubernetes (K8s) 则专为分布式、大规模的生产环境而生。它能将应用程序部署到多台服务器（集群）上，提供自动故障转移、负载均衡、水平伸缩等高级功能。K8s 就像一个“大型舰队的总司令”，能协调成百上千甚至上万个容器在不同服务器上高效运作，即便有服务器宕机，也能保证服务不受影响。1.4 K8s 的核心理念：声明式控制K8s 的强大之处在于它的“声明式”管理模式。你声明目标，K8s 负责实现： 你不需要告诉 K8s 如何一步步执行任务（“先启动服务器 A，再部署程序 B”）。你只需声明你希望的最终状态（“我需要 5 个应用程序实例在运行，版本为 2.0”）。自动调整： K8s 会持续检查当前状态是否符合你的声明。如果发现不符，它会主动采取行动，直到达到你定义的目标状态。并且，它会一直维护这个状态。当然，很多读者可能难以理解上述所说的“声明式”管理模式到底是怎么样的一个机制，不用着急，听我继续娓娓道来。第二章：深入 K8s 世界——核心概念与组件在第一章中，我们了解了 K8s 的诞生背景、其核心价值以及声明式管理理念。现在，是时候揭开 K8s 这座“智能机器人”的内部构造了。我们将从 K8s 的基本组成单位开始，逐步认识那些协同工作，共同支撑你的应用程序稳定运行的关键概念。2.1 K8s 的“骨架”：集群 (Cluster)K8s…

数据库字段级权限控制方案设计
type: item
date: 2024-12-20T12:48:00+00:00
description: 在现代企业的信息化建设中，数据库作为核心的数据存储和管理平台，其安全性至关重要。随着数据隐私保护法规的日益严格以及信息安全需求的不断提升，传统的数据库访问控制已无法满足日益复杂的业务需求。尤其是在多用户、多权限环境下，如何精细化地管理数据库访问权限，确保不同角色用户对数据的访问符合最小权限原则，已成为一个亟待解决的问题。因此，数据库字段级权限控制方案应运而生，它通过对数据库字段的精细化权限管理，保障数据的安全性、合规性以及隐私保护，为企业提供更为高效和安全的数据访问机制。本文将探讨数据库字段级权限控制的必要性、实现方式及其在实际应用中的挑战与解决方案。数据库视图（View）数据库的 视图 就是一个虚拟的“表”，它实际上不是存储数据的，而是一个 预定义的查询。你可以通过视图像查询普通表一样查询数据，但视图背后会自动执行查询语句，并返回结果。使用数据库视图是实现字段级别权限控制的一种方式。通过创建视图，可以控制用户对特定字段是否可见。视图可以仅暴露需要访问的字段，而隐藏敏感字段。视图是一个虚拟表，其内容由查询定义。同真实的表一样，视图包含一系列带有名称的列和行数据。但是，视图并不在数据库中以存储的数据值集形式存在。视图行和列数据来自于定义视图的查询所引用的表，并且在引用视图时动态生成，也就是相当于将可见字段从查询出的原始数据中拷贝到了视图中。从数据库系统内部来看，视图是由一张或多张表中的数据组成的。视图可以查询，但不可以新增、删除、修改。假设有一个员工表 employees，你只希望显示员工的名字和部门，不显示工资。你可以创建一个视图 employee_summary，它只返回 name 和 department 字段。CREATE VIEW employee_summary AS SELECT name, department FROM employees;然后，查询视图 employee_summary 就能看到员工名字和部门，而看不到工资。视图就像是数据库的“窗户”，让你看到筛选后的数据。行级安全（Row-Level Security, RLS）行级安全（RLS） 是一种数据库安全机制，它可以控制不同用户对表中不同行的访问权限。简单来说，RLS 让你根据用户的身份或角色，限制他们只能查看或修改某些特定的行，而不是整个表的数据。数据库的行级安全机制允许你根据行的条件来限制访问。虽然这是针对行的控制，但它与字段级别权限可以结合使用。你可以通过结合使用行级安全和视图来间接控制字段级权限。RLS(ROW Level Security) 提供基于行的安全策略，限制数据库用户的查看表数据权限。用于限制某个用户只能查询某个表中的某些字段，不同的用户访问一个表可以看到不同的数据。但是在非Saas系统中通常不会采用这种机制，一般情况下只会在一套代码中使用相同数据库用户进行连接，而不会为每个业务用户创建一个数据库用户。假设有一个员工表，包含所有员工的个人信息。如果你只希望每个部门的经理看到自己部门的员工数据，可以通过行级安全为不同的经理设置权限，让他们只能查询和操作自己部门的员工信息。RLS 通过在查询时自动应用过滤条件来实现这一点，不需要在每次查询时手动添加条件，确保数据的安全性和隔离性。应用层过滤在数据库层面进行权限控制是有限的，因此很多字段级别的权限控制通常是由应用层来处理的。你可以在应用程序中为不同的用户角色编写代码，控制哪些字段可以被显示或修改。应用层过滤通常基于ORM框架动态构建查询条件，基础设施层变更不会对项目产生较大的影响，但是需要对每一个需要数据库字段级别权限控制的方法都编写不同的处理方式，不过这种方式的灵活度也是相对较高的。数据库触发器（Triggers）数据库触发器（Triggers） 是一种在数据库中定义的特殊对象，它会在特定事件发生时自动执行预定义的操作。触发器的作用是响应 INSERT、UPDATE 或 DELETE 等数据库操作，并在这些操作发生时执行特定的代码。通俗来说，触发器就像是一个“自动化的守卫”，它在数据库中监控特定的事件，当这些事件发生时，它会自动执行相关的操作，无需显式调用。触发器可以在某些数据库操作（如 INSERT、UPDATE、SELECT）发生时执行特定逻辑。虽然它不是一种典型的权限控制方法，但可以用于限制字段的修改。通常是配合加密敏感字段方式使用，从而实现用户对于该敏感字段的可见限制，但是单纯靠这种方案无法实现对于不同用户拥有不一样的权限规则。多字段联合权限控制多字段联合权限控制 是指基于多个字段的组合来控制用户对数据的访问权限。这种控制方式通常在 复杂权限控制 或 细粒度权限控制 需求中非常有用，尤其是当单一字段不足以描述访问权限时。通过联合多个字段的条件，可以更精确地控制哪些数据对哪些用…

单点登录与授权登录业务指南
type: item
date: 2023-12-15T12:25:00+00:00
description: 单点登录与授权登录业务指南何为单点？何为授权？有什么地方不正确或者缺少了某些知识请及时告诉我，感谢，如果觉得不错可以关注一下我公众号：栈堆溢出。前言本文篇幅较长，旨在详细的让读者搞清楚单点登录与授权登录两套业务的详细流程与相关知识，如不喜欢长篇幅或者嫌弃啰嗦的请不要阅读。本文代码部分由AI编写，不一定准确，但是肯定可以参考，逻辑正确。本文部分内容从互联网进行了些许参考，并且素材声明了来源。单点与授权的业务很简单，但是想要详细的掌握并完成需求也不是可以直接上手的。单点单点登录（SSO）是一种用户身份验证过程，允许用户使用单一的登录凭据来访问多个应用程序或服务。它减少了需要记忆多个用户名和密码的需求，提高了安全性和用户体验。SSO在企业环境中尤为重要，因为它简化了对多个内部和外部服务的访问过程。使用Google账号登录各种服务。例如，你可以用Google账号登录Gmail，然后不需要再次登录就能访问Google Drive、Google Photos、YouTube等Google服务。这种方式让用户无需记住多个账号和密码，提供了便捷和高效的用户体验。授权授权登录，如OAuth，是一种允许应用程序或服务在不共享用户的登录凭证的情况下，安全地访问用户在其他服务上的数据的协议。它为第三方应用提供了有限的访问权限，通常用于社交媒体登录、数据共享等场景。这种方法提高了数据安全性，同时也方便了用户和服务之间的数据交互。一个常见的授权登录示例是使用社交媒体账号登录其他服务或应用。例如，很多网站和应用允许你使用Facebook或Google账号登录。当你选择这种登录方式时，网站会引导你到Facebook或Google的登录页面。在这里，你需要授权该网站访问你的某些社交媒体信息（如基本资料）。一旦授权，你就可以使用社交媒体账号在新网站上登录，而无需创建新的账户。这种方式简化了登录流程，同时保护了你的密码安全，因为你的社交媒体登录信息不会被第三方网站获取。融合单点登录与授权登录是分开的两套业务，但是可以配合使用，比如，Google Mail 首次登录时，需要使用Google账号授权登录Google Mail，但是登录之后，Google旗下的YouTube、Google Cloud等服务均无需登录(处于已登录状态)，这就是配合使用的情况。目前国内的腾讯旗下几乎所有站点，都采用的是QQ授权登录，网易我尝试了一下，163官网与网易账户中心是SSO，其余都是账号密码登录。单点登录（SSO）为何诞生？为什么会诞生SSO这种业务呢，主要就是为了方便用户，当一个企业的业务站点过多的时候，用户每一个业务都去注册、登录，无疑会给用户带来体验上的阻碍，而此时，如果使用一种登录一个网站其余网站均为登录状态的技术，这样可以极大的优化用户的体验，无需重复的注册账户和输入密码。但是在最开始，并不是直接使用SSO这样的方案来实现的，且听我娓娓道来。早期方案早期的多系统登录常使用同一顶级域名下的cookie共享方法。例如，公司的多个系统的子域名都在“ixor.me”下，比如：“blog.ixor.me”与“www.ixor.me”，它们的主域名都是ixor.me，所以这些网站的cookie都是可以共享的，通过共享cookie来实现网站登录的互联。这种方法的局限在于：所有系统必须使用相同的域名和技术平台，且cookie存在安全风险。因此，为了更安全高效地实现多系统登录，逐渐发展到了单点登录（SSO）。单点登录与早期方案相比优势：安全性更高：SSO减少了密码泄露的风险。用户体验更佳：用户只需登录一次即可访问所有服务。技术适用性广：支持跨域名和多种技术平台。劣势：实现复杂度高：需要更精细的安全和集成设计。维护成本提高：对于系统间的集成和安全维护有更高要求。SSO变化自适应 SSO 需要在一开始登录时输入用户名和密码，但随后如出现其他风险，例如，当用户从新设备登录或尝试访问特别敏感的数据或功能时，就需要额外的身份验证因子或重新登录。联合 SSO - 更准确的名称是联合身份管理 (FIM)，是 SSO 的扩展。 SSO 基于单个组织域内应用之间的数字信任关系，而 FIM 会将这种关系扩展到组织外部的可信第三方、供应商和其他服务提供商。 例如，FIM 允许已登录的员工访问第三方 Web 应用程序（如 Slack 或 WebEx），无需额外登录，或者仅使用用户名来登录。社交登录允许用户使用他们访问流行社交媒体网站的凭证来访问第三方应用。 社交登录简化了用户的生活。 对于第三方应用提供商，它可以阻止不良行为（例如，错误登录和购物车遗弃），并为改进其应用提供有价值的信息。SSO原理单点登录的原理主要是由下面部分构成：统一登录入口：所有系统共用一个登录页面，用户只在这里登录一次。授权令牌创建：登录成功…