android ssl验证、https验证

article/2025/10/8 22:10:15

准备知识:

Keytool工具的使用。

在用Android平台上使用SSL,第一步就是生成证书。

1、证书的生成

1.1生成服务器端的证书py

  1. keytool -genkey -alias test -keystore test.jks  
1.2 将keystore中的cert导出来,用来生成客户端的验证证书
[html]  view plain copy
  1. keytool -exportcert -alias test -file test.cert -keystore test.jks  
1.3 生成Android平台的证书

因为Android 要求要BC证书,而Java的keytool本身不提供BKS格式,因此要自己手动配置。个人在配置的过程到了文件正在使用中,保存失败的情况,我的做法是将文件备份一下,用unlocker删除后将修改好备份放到原位置就好了。

1.3.1 下载 bcprov-ext-jdk15on-146.jar 

到官网下载本地jdk对应的jar,复制到C:\Program Files\Java\jdk1.6.0_43\jre\lib\ext

1.3.2 配置bcprov

在 jdk_home\jre\lib\security\目录中找到 java.security 在内容增加一行(数字可以自己定义)

[html]  view plain copy
  1. security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider  
1.3.3 生成android平台的证书

[html]  view plain copy
  1. keytool -importcert -keystore test.bks -file test.cert -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider  


一、什么是SSL?
  SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
  SSL/TLS协议位于HTTP协议与传输层协议之间,采用公钥技术,为两个应用间的通讯提供加密、完整性校验以及身份认证。
SSL协议提供了三个功能:
使用公钥证书对双端进行认证(一般仅进行服务器认证,客户端认证为可选)
通信加密(Confidentiality)
数据完整性检查(Data integrity)

二、SSL握手
  SSL会话以称之为SSL握手的一系列消息交换开始,在握手过程中服务器通过公钥技术向客户端认证自身(可选,客户端向服务器认证自身),客户端和服务器协商加密消息的对称密钥,SSL会话握手后的消息都使用对称密钥加密后传输,对称密钥还用于消息完整性检查。

 


  1. Client->Server ClientHello
    Client向Server发送一个“ClientHello”消息,说明它支持的密码算法列表、压缩方法及最高协议版本,以及稍后将被使用的随机数
    Version: 客户端支持TLS协议最高版本号(最高3.3)
    RandomNumber:客户端产生的28byte随机数,后续用作加密种子。
    CipherSuites 客户端支持的加密算法和密钥大小列表
    CompressionMethods 客户可支持的压缩算法
  2. Server->Client ServerHello
    服务器向客户端发送“ServerHello”消息,包含服务器选择的密码算法、压缩方法、协议版本以及服务器产生的随机数。
    Version: 选择的TLS版本号
    RandomeNumber:服务器产生的28字节随机数,后续用作加密种子
    CipherSuite: 选择的加密算法和密钥大小。
    CompressionMethod: 选择的数据压缩算法
  3. Server->Client Certificate
    Server向Client发送自身的证书链,证书链从服务器的公钥证书(public-key
    certificate)开始一直到CA的根证书(certificate
    authority’s root certificate).
    客户端需要对server的证书链进行验证,如果验证不通过,则终止连接。若验证通过,则可从server的公钥证书中获取到server的公钥。验证流程见后续介绍。
  4. Server->Client CertificateRequest
    如果Server需要认证Client,则发送此消息请求Client的公钥证书,此消息为可选。消息中包含
    Certificate Types: Server可接收的证书类型列表
    DistinguishedNames: Server可接收的CA DN列表。
  5. Server->Client ServerHelloDone
    Server发送此消息通知Client已完成了初始化协商消息。
  6. Client->Server Certificate
    如果Server请求了Client的证书,即存在消息4,则client将自身的证书链信息发送给Server。Server要对Client的证书链进行验证,如果验证不通过,则终止连接,如果验证通过则可从Client的公钥证书中获取到Client的公钥。验证流程见后续介绍.
  7. Client->Server ClientKeyExchange
    Client向Server发送premaster secret,并且用Server的公钥加密。premaster secret用于双方计算出对后续消息加密的对称密钥. 使用Server的公钥加密的目的是确认Server具有消息3中所生成公钥证书的私钥,避免发送给伪造的服务器。
  8. Client->Server CertificateVerify
    如果Server请求了Client的证书,则还需要发送CertificateVerify消息,Client将到现在为止发送和接收到的握手消息,使用Client的私钥进行签名发送给Server,用于向Server证明其有消息6中声称Client公钥的私钥数据。Server可使用消息6中获得的Client公钥对消息进行验证。
  9. Client->Server ChangeCipherSpec
    Client使用客户端随机数,服务器随机数以及premaster secret产生加密消息的对称密钥Master Secret。然后发送此消息告知Server后续消息将使用对称密钥加密
  10. Client->Server Finished
    Client向Server发送此消息通知对端协商成功,此消息使用协商的公钥密钥加密。
  11. Server->Client ChangeCipherSpec
    Server使用客户端随机数,服务器随机数以及premaster secret产生加密消息的对称密钥Master Secret。然后发送此消息告知Client后续消息将使用对称密钥加密.
  12. Server->Client Finished
    Server向Client发送此消息通知对端协商成功,此消息使用协商的公钥密钥加密。

三、SSL通信模式:

1.服务端:

SSL服务端需要通过SSL服务套接字来提供服务接口,而SSL服务套接字需要通过SSL上下文实例来创建。以下是对SSL服务端的启用过程的描述。

(1)通过指定协议(一般是TLS)获取SSL上下文(SSLContext)实例。

(2)通过指定算法(X.509相关)获取密钥管理器工厂(KeyManagerFactory)实例。

(3)通过指定类型和提供者获取密钥库(KeyStore)实例。

(4)密钥库实例使用约定的密码加载(Load)密钥库文件(.keystore)。

(5)密钥管理器工厂实例使用约定的密码和(4)中密钥库进行初始化(Initialize)。

(6)SSL上下文实例通过密钥管理器工厂实例提供的密钥管理器来初始化(Initialize)。

(7)当SSL上下文实力初始化成功后,就可以获取该上下文势力所关联的服务套接字工厂(ServerSocketFactory)实例

(8)服务套接字工厂实例依据指定的服务端口来创建(Create)服务套接字(ServerSocket)。

(9)当SSL服务套接字创建成功,就可以等待客户端的连接,与客户端进行通信。

(10)通信完毕可以关闭服务套接字。

2.客户端

(1)通过指定协议(一般是TLS)获取SSL上下文(SSLContext)实例。

(2)通过指定算法(X.509相关)获取密钥管理器工厂(KeyManagerFactory)实例。

(3)通过指定算法(X.509相关)获取信任管理器工厂(TrustManagerFactory)实例。

(4)通过指定类型和提供者获取密钥库(KeyStore)实例。

(5)通过指定类型和提供者获取信任密钥库(KeyStore)实例。

(6)(4)中密钥库实例使用约定的密码加载(Load)密钥库文件(.keystore)。

(7)(5)中信任密钥库实例使用约定的密码加载(Load)密钥库文件(.keystore)。

(8)密钥管理器工厂实例使用约定的密码和(4)中密钥库进行初始化(Initialize)。

(9)信任密钥管理器工厂实例使用约定的密码和(5)中密钥库进行初始化(Initialize)。

(10)当SSL上下文实力初始化成功后,就可以获取该上下文实例所关联的套接字工厂(SocketFactory)实例

(11)套接字工厂实例依据指定的主机和端口来创建(Create)客户端套接字(Socket)。

(12)当SSL服务套接字创建成功,就可以向服务端发送请求,与服务端进行通信。

(13)通信完毕可以关闭服务套接字。

 
  服务端代码:  

import java.io.BufferedInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import javax.net.ServerSocketFactory;
import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
/*** @author  draem0507@gmail.com* @TODO    java线程开发之四 SSL加密* 开发步骤* 1.生成服务端密钥* 2.导出服务端证书* 3.生成客户端密钥* 4.程序开发测试* 关于证书的生成请参考readme.txt* 参考资料:http://chrui.iteye.com/blog/1018778* @version 1.0* @date 2013-5-7 23:22:45    * @update 2013-5-8 10:22:45    * @blgos http://www.cnblogs.com/draem0507*/
public class Server {private ServerSocket serverSocket;private final static char[] password="1qaz2wsx".toCharArray();private SSLContext context;private InputStream inputStream;public Server() {inputStream=this.getClass().getResourceAsStream("/test.jks");initContext();try {//直接运行会报 javax.net.ssl.SSLException://ServerSocketFactory factory=     SSLServerSocketFactory.getDefault();ServerSocketFactory factory=     context.getServerSocketFactory();
//            serverSocket = new ServerSocket(10000);serverSocket=factory.createServerSocket(10000);System.out.println("======启动安全SocektServer成功=========");while (true) {Socket socket = serverSocket.accept();new ReceiveSocket(socket).start();}} catch (IOException e) {e.printStackTrace();}}//ssl 上下文对象的初始化private void initContext() {try {KeyStore store=KeyStore.getInstance("JKS");store.load(inputStream, password);KeyManagerFactory factory=KeyManagerFactory.getInstance("SunX509");factory.init(store,password);KeyManager []keyManagers=factory.getKeyManagers();context=SSLContext.getInstance("SSL");context.init(keyManagers, null    , null);} catch (KeyStoreException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (CertificateException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (UnrecoverableKeyException e) {e.printStackTrace();} catch (KeyManagementException e) {e.printStackTrace();}}public static void main(String[] args) {new Server();}private class ReceiveSocket extends Thread {private Socket socket;public ReceiveSocket(Socket socket) {this.socket = socket;}private ObjectInputStream reader;private ObjectOutputStream writer;@Overridepublic void run() {try {reader=new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));//writer=new ObjectOutputStream(socket.getOutputStream());// 开启无限循环 监控消息//java.io.EOFExceptionObject obj=    reader.readUTF();SocketAddress address = socket.getRemoteSocketAddress();System.out.println(address.toString() + ">\t" + obj);
//                Object obj=    reader.readObject();
//                    if(obj!=null)
//                    {
//                        User user =(User)obj;
//                        System.out.println("id=="+user.getPassword()+"\tname=="+user.getName());
//                    }//    while (true) {}} catch (IOException e) {e.printStackTrace();} finally {if (null != reader) {try {reader.close();} catch (IOException e) {e.printStackTrace();}}if (null != writer) {try {reader.close();} catch (IOException e) {e.printStackTrace();}}try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}
}


 Android客户端代码:     

protected Void doInBackground(Void... params) {Log.i(TAG, "doInBackground");try {SSLContext context;KeyStore ts = KeyStore.getInstance("BKS");ts.load(getResources().openRawResource(R.raw.test),"1qaz2wsx".toCharArray());TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");tmf.init(ts);TrustManager[] tm = tmf.getTrustManagers();context = SSLContext.getInstance("SSL");context.init(null, tm, null);SocketFactory factory = context.getSocketFactory();SSLSocket socket = (SSLSocket) factory.createSocket("192.168.70.249", 10000);ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());out.writeUTF(UUID.randomUUID().toString());out.flush();System.out.println("========客户端发送成功=========");;socket.close();} catch (Exception ex) {ex.printStackTrace();}return null;}

四、HTTPS

 HTTPS可以视为HTTP的安全版本(Secure),其安全基础基于SSL协议(Secure Socket Layer,安全套接字层)。HTTPS在HTTP的基础上添加了一个加密和身份验证。其默认端口是443.对于一些对数据安全要求比较高的网络应用,比如网络支付,网上银行,都是采用HTTPS通信机制,其规范:RFC2818
HTTPS URL连接的方式访问HTTPS服务器与HTTP URL访问HTTP服务器的方式基本相同。用到的类:HttpsURLConnection。


代码例子(验证服务器):

HttpsURLConnection方式

 public static String getHttpsContent(Map<String, String> paramsMap, String urlPath){try{File bksFile = new File("bks文件路径");if(bksFile.exists()){InputStream keyStoreInput = new FileInputStream(bksFile);String keyStoreType = KeyStore.getDefaultType();KeyStore keyStore = KeyStore.getInstance(keyStoreType);keyStore.load(keyStoreInput, KEYSTORE_PASSWORD.toCharArray());// Create a TrustManager that trusts the CAs in our KeyStoreString tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);tmf.init(keyStore);KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");kmf.init(keyStore, KEYSTORE_PASSWORD.toCharArray());// Create an SSLContext that uses our TrustManagerSSLContext sslContext = SSLContext.getInstance("TLS");sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);X509HostnameVerifier hostnameVerifier = SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);StringBuilder entityBuilder = new StringBuilder("");if(paramsMap!=null && !paramsMap.isEmpty()){for(Map.Entry<String, String> entry : paramsMap.entrySet()){entityBuilder.append(entry.getKey()).append('=');entityBuilder.append(URLEncoder.encode(entry.getValue(), HTTP.UTF_8));entityBuilder.append('&');}entityBuilder.deleteCharAt(entityBuilder.length() - 1);}byte[] entity = entityBuilder.toString().getBytes();// Tell the URLConnection to use a SocketFactory from our SSLContext//URL url = new URL("https://172.16.18.109");URL url = new URL(urlPath);HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();urlConnection.setSSLSocketFactory(sslContext.getSocketFactory());urlConnection.setConnectTimeout(5 * 1000);urlConnection.setRequestMethod("POST");urlConnection.setDoOutput(true);//允许输出数据urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");urlConnection.setRequestProperty("Content-Length", String.valueOf(entity.length));OutputStream outStream = urlConnection.getOutputStream();outStream.write(entity);outStream.flush();outStream.close();InputStream in = urlConnection.getInputStream();StringBuffer sb = new StringBuffer();String line = null;char ch = '\u0000';int temp = 0 ;while ((temp = in.read()) != -1) {ch = (char) temp;sb.append((char) temp);}String result = sb.toString();return result;}return "-1";}catch(Exception e){e.printStackTrace();return "-2";}}

HttpClient方式:

 public static  synchronized HttpClient getHttpClient(Context context) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException, KeyManagementException, UnrecoverableKeyException{if(null==httpClient){AssetManager sm=	 context.getAssets();InputStream keyStroreInputStream=sm.open("ca_zx.bks");		  KeyStore  keyStore=KeyStore.getInstance(KeyStore.getDefaultType());keyStore.load(keyStroreInputStream, KEYSTORE_PASSWORD.toCharArray());SSLSocketFactory sf=new MySSLSocketFactory(keyStore);sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);HttpParams params=new BasicHttpParams();HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);HttpProtocolParams.setUseExpectContinue(params, true);ConnManagerParams.setTimeout(params, 10000);HttpConnectionParams.setConnectionTimeout(params, 15000);HttpConnectionParams.setSoTimeout(params, 20000);SchemeRegistry schreg=new SchemeRegistry();schreg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));schreg.register(new Scheme("https", 	sf , 443)); ClientConnectionManager conman=new ThreadSafeClientConnManager(params, schreg);httpClient=new DefaultHttpClient(conman, params);}return httpClient;}private static  class MySSLSocketFactory extends SSLSocketFactory{SSLContext sslContext=SSLContext.getInstance("TLS");public MySSLSocketFactory(KeyStore truststore)throws NoSuchAlgorithmException, KeyManagementException,KeyStoreException, UnrecoverableKeyException {super(truststore);TrustManager tm=new X509TrustManager() {@Overridepublic X509Certificate[] getAcceptedIssuers() {return null;}	@Overridepublic void checkServerTrusted(X509Certificate[] chain, String authType)throws CertificateException {}	@Overridepublic void checkClientTrusted(X509Certificate[] chain, String authType)throws CertificateException {}};KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");kmf.init(truststore, KEYSTORE_PASSWORD.toCharArray());sslContext.init(kmf.getKeyManagers(), new TrustManager[]{ tm}, null);}@Overridepublic Socket createSocket() throws IOException {// TODO Auto-generated method stubreturn sslContext.getSocketFactory().createSocket();}@Overridepublic Socket createSocket(Socket socket, String host, int port,boolean autoClose) throws IOException, UnknownHostException {return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);}}

参考: http://blog.csdn.net/acnt3w/article/details/9169995 Android SSL 过程记录(证书的生成+例子代码)

http://www.winddisk.com/2013/02/16/httpsssl%E4%BB%8B%E7%BB%8D/  https/SSL介绍


http://chatgpt.dhexx.cn/article/NFmWTI97.shtml

相关文章

Java安全之SSL/TLS

在前面所讲到的一些安全技术手段如&#xff1a;消息摘要、加解密算法、数字签名和数据证书等&#xff0c;一般都不会由开发者直接地去使用&#xff0c;而是经过了一定的封装&#xff0c;甚至形成了某些安全协议&#xff0c;再暴露出一定的接口来供开发者使用。因为直接使用这些…

【ssl认证、证书】java中的ssl语法API说明(SSLContext)、与keytool 工具的联系

文章目录 1. 前言java中的ssl语法与keytool 工具的联系 2. SSLContext的体系2.1 KeyStore2.1.1 通过证书库文件创建&#xff1a;2.1.2 随机生成自签名证书库 2.2 KeyManager2.2.1 KeyManagerFactory工厂创建&#xff1a;2.2.2 自己创建一个密钥管理器数组&#xff1a; 2.3 Trus…

import sslssl._create_default_https_context = ssl._create_unverified_context

# 全局取消证书验证import ssl ssl._create_default_https_context ssl._create_unverified_context参考&#xff1a;urllib.error.URLError: urlopen error [SSL: CERTIFICATE_VERIFY_FAILED]_彭世瑜的博客-CSDN博客报错urllib.error.URLError: <urlopen error [SSL: CERT…

HttpClient配置SSL绕过https证书

HttpClient简介 HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了&#xff0c;越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能&#xff0c;但是对于大部分应用程序来说&#xff0…

java SSLContext

1. 什么是SSLSocket JDK文档指出&#xff0c;SSLSocket扩展Socket并提供使用SSL或TLS协议的安全套接字。 这种套接字是正常的流套接字&#xff0c;但是它们在基础网络传输协议(如TCP)上添加了安全保护层。 具体安全方面的讨论见下一篇。本篇重点关注SSLSocket及相关几个类的使用…

SSLContext

1. 什么是SSLSocket JDK文档指出&#xff0c;SSLSocket扩展Socket并提供使用SSL或TLS协议的安全套接字。 这种套接字是正常的流套接字&#xff0c;但是它们在基础网络传输协议(如TCP)上添加了安全保护层。 具体安全方面的讨论见下一篇。本篇重点关注SSLSocket及相关几个类的使用…

Java SSLSocket的使用

1. 什么是SSLSocket JDK文档指出&#xff0c;SSLSocket扩展Socket并提供使用SSL或TLS协议的安全套接字。 这种套接字是正常的流套接字&#xff0c;但是它们在基础网络传输协议(如TCP)上添加了安全保护层。 具体安全方面的讨论见下一篇。本篇重点关注SSLSocket及相关几个类的…

java网络学习之 JSSE 介绍 包含sslcontext(15)

java 安全套接字扩展 是 在原有的socket之上 封装了一层SSL/TLS 这样的高级网络协议的实现,使得原有的socket 通讯变得安全。 1 SSL/TLS 协议介绍&#xff1a; SSL 是洋文“Secure Sockets Layer”的缩写&#xff0c;中文叫做“安全套接层”。为啥要发明 SSL 这个协议捏&…

java SSLContext创建

概述 HTTPS相对于HTTP多了SSL&#xff08;security sock layer&#xff09;&#xff0c;应用层将数据丢给TCP时&#xff0c;需要经过SSL层的加密处理&#xff1b;TCP层的数据丢给应用层时&#xff0c;需要经过SSL层的解密处理。因此网络中传输的都是加密后的数据&#xff0c;提…

【Jetpack】使用 Room Migration 升级数据库并导出 Schema 文件 ( Schema 文件简介 | 生成 Schema 文件配置 | 生成 Schema 文件过程 )

文章目录 一、Schema 文件简介二、生成 Schema 文件配置三、生成 Schema 文件过程1、数据库版本 1 - 首次运行应用2、数据库版本 1 升级至 数据库版本 2 - 第二次运行应用3、数据库版本 2 升级至 数据库版本 3 - 第三次运行应用 一、Schema 文件简介 使用 Room Migration 升级数…

数据库,schema,catalog三者的涵义(简单描述)

你是否经常见到schema&#xff0c;catalog这些单词&#xff0c;在数据库的背景下是什么意思呢&#xff1f; 两篇参考&#xff1a;http://www.iteye.com/problems/9738 及 http://luckybat.iteye.com/blog/259976 taopian (高级程序员) 2009-01-07 写道 schema是对一个数据库的结…

mysql中information_schema数据库

目录 1、information_schema说明 2、information_schema下的表 2.1 schemata表 2.2 tables表 2.3 columns表 2.4 statistics表 2.5、user_privileges表&#xff08;用户权限表&#xff09; 2.7 table_privileges表&#xff08;表权限表&#xff09; 2.8 column_privileges…

数据库中Schema和Database有什么区别

本文源自&#xff1a; 数据库中Schema和Database有什么区别 - 人生似烟的日志 - 网易博客 http://blog.163.com/baibai_zheng/blog/static/51980755201022125325689/ ------------------------------------------------------------------------------------------------------…

数据库的 Schema 变更实现

一、减少元数据变更的措施 元数据变更是数据库管理中不可避免的工作项&#xff0c;减少元数据变更次数可降低数据库维护和管理成本&#xff0c;减轻对业务的影响。这里我们可以优先考虑以下 3 点&#xff1a; 精细计划 在数据库设计和开发阶段&#xff0c;精细设计元数据结构…

数据库中的 Schema 变更实现

线上沙龙-技术流第 30 期营业啦 05月09日&#xff08;周二&#xff09;19:30 KaiwuDB - B站直播间 传统数据库操作 Schema 变更时&#xff0c;第一步便是锁表&#xff0c;需持续到 Schema 变更操作完成。这样的做法虽然实现简单&#xff0c;无需考虑事务并发带来的影响&#…

SQL SERVER 中的Schema详解

以往 SQL Server 内的对象命名是“服务器.数据库.用户名.对象”&#xff0c;但新版的对象命名改为“服务器.数据库.Schema.对象”。这让你规划数据库对象命名时更有弹性。 架构是形成单个命名空间的数据库实体的集合。命名空间是一个集合&#xff0c;其中每个元素的名称都是唯…

Schema是什么

数据库中的Schema 在SQL环境下&#xff0c;schema就是数据库对象的集合&#xff0c; 所谓的数据库对象也就是常说的表&#xff0c;索引&#xff0c;视图&#xff0c;存储过程等。 所谓的数据库对象也就是常说的表&#xff0c;索引&#xff0c;视图&#xff0c;存储过程等。 所…

如何理解MYSQL中schema的概念

学习ES中用到了mapping&#xff0c;百度说类似与MYSQL中的schema&#xff0c;于是对schema的概念很模糊&#xff0c;这里做一下笔记&#xff0c;进行学习。 schema 读音&#xff1a; /ˈskiːmə/ &#xff0c;汉语意思&#xff1a;&#xff08;计划或理论的&#xff09;提要&a…

MySQL的Schema是什么?

1 Schema概念 schema在数据库中表示的是数据库对象集合&#xff0c;它包含了各种对像&#xff0c;比如&#xff1a;表&#xff0c;视图&#xff0c;存储过程&#xff0c;索引等等。 一般一个用户对应一个集合&#xff0c;所以为区分不同集合就需给不同集合起名。用户的schema名…

【database】数据库schema概念解读

schema概念定义 数据库中的schema有多种不同含义和实现&#xff1a; 数据库中的数据模型(data model)数据库中的整个数据结构(data structure)和程序(program)命名空间(namespace)是SQL的一个元素 1. Data Model 数据库schema的含义之一是数据库中表之间的结构&#xff0c;…