Short answer: No they aren't asscoiated with shader programs.
Long answer : Vertex and vertex attributes are stored in buffers which may or may not be located on the GPU memory depending on how you define them and how the driver decides to.
glBindBuffer binds a specific buffer object (referenced by uint) to a specific binding point like GL_ARRAY_BUFFER, think of this as how openGL are going to deal with this buffer.
GLSL shader programs take vertices and vertex attributes as input. These attibutes are not passed to the active shader program unless you do the following:
- Bind the buffer that contains the data. (Assuming they are already stored in the buffer).
Query the location of each shader program attribute varialbe so you can bind Attribute Pointer to them in the next step (or just use a predefined locations).
Decide how are you going to deference the buffer data using glVertexAttribPointer and where each AttributePointer will be bound using the queried names(uint) from step 2.
- Perform the actual draw operation.